From: Jack Humbert <jack.humb@gmail.com> Date: Fri, 7 Jul 2017 15:55:23 +0000 (-0400) Subject: Merge commit '60b30c036397cb5627fa374bb930794b225daa29' as 'lib/lufa' X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=8655d4f4948b2deef7844503c8d690f23ac1a062;p=qmk_firmware.git Merge commit '60b30c036397cb5627fa374bb930794b225daa29' as 'lib/lufa' --- 8655d4f4948b2deef7844503c8d690f23ac1a062 diff --cc lib/lufa/.gitignore index 000000000,000000000..9f9d39491 new file mode 100644 --- /dev/null +++ b/lib/lufa/.gitignore @@@ -1,0 -1,0 +1,15 @@@ ++*.o ++*.d ++*.elf ++*.hex ++*.eep ++*.sym ++*.bin ++*.lss ++*.map ++*.bak ++*.class ++Documentation/ ++LUFA/StudioIntegration/ProjectGenerator/* ++LUFA/StudioIntegration/DocBook/* ++!LUFA/StudioIntegration/Docbook/mshelp/* diff --cc lib/lufa/Bootloaders/CDC/BootloaderAPI.c index 000000000,000000000..2be156808 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/CDC/BootloaderAPI.c @@@ -1,0 -1,0 +1,75 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * Bootloader user application API functions. ++ */ ++ ++#include "BootloaderAPI.h" ++ ++void BootloaderAPI_ErasePage(const uint32_t Address) ++{ ++ boot_page_erase_safe(Address); ++ boot_spm_busy_wait(); ++ boot_rww_enable(); ++} ++ ++void BootloaderAPI_WritePage(const uint32_t Address) ++{ ++ boot_page_write_safe(Address); ++ boot_spm_busy_wait(); ++ boot_rww_enable(); ++} ++ ++void BootloaderAPI_FillWord(const uint32_t Address, const uint16_t Word) ++{ ++ boot_page_fill_safe(Address, Word); ++} ++ ++uint8_t BootloaderAPI_ReadSignature(const uint16_t Address) ++{ ++ return boot_signature_byte_get(Address); ++} ++ ++uint8_t BootloaderAPI_ReadFuse(const uint16_t Address) ++{ ++ return boot_lock_fuse_bits_get(Address); ++} ++ ++uint8_t BootloaderAPI_ReadLock(void) ++{ ++ return boot_lock_fuse_bits_get(GET_LOCK_BITS); ++} ++ ++void BootloaderAPI_WriteLock(const uint8_t LockBits) ++{ ++ boot_lock_bits_set_safe(LockBits); ++} diff --cc lib/lufa/Bootloaders/CDC/BootloaderAPI.h index 000000000,000000000..5169bbc3c new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/CDC/BootloaderAPI.h @@@ -1,0 -1,0 +1,58 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 BootloaderAPI.c. ++ */ ++ ++#ifndef _BOOTLOADER_API_H_ ++#define _BOOTLOADER_API_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/boot.h> ++ #include <stdbool.h> ++ ++ #include <LUFA/Common/Common.h> ++ ++ #include "Config/AppConfig.h" ++ ++ /* Function Prototypes: */ ++ void BootloaderAPI_ErasePage(const uint32_t Address); ++ void BootloaderAPI_WritePage(const uint32_t Address); ++ void BootloaderAPI_FillWord(const uint32_t Address, const uint16_t Word); ++ uint8_t BootloaderAPI_ReadSignature(const uint16_t Address); ++ uint8_t BootloaderAPI_ReadFuse(const uint16_t Address); ++ uint8_t BootloaderAPI_ReadLock(void); ++ void BootloaderAPI_WriteLock(const uint8_t LockBits); ++ ++#endif ++ diff --cc lib/lufa/Bootloaders/CDC/BootloaderAPITable.S index 000000000,000000000..2c60f84e8 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/CDC/BootloaderAPITable.S @@@ -1,0 -1,0 +1,91 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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. ++*/ ++ ++; Trampolines to actual API implementations if the target address is outside the ++; range of a rjmp instruction (can happen with large bootloader sections) ++.section .apitable_trampolines, "ax" ++.global BootloaderAPI_Trampolines ++BootloaderAPI_Trampolines: ++ ++ BootloaderAPI_ErasePage_Trampoline: ++ jmp BootloaderAPI_ErasePage ++ BootloaderAPI_WritePage_Trampoline: ++ jmp BootloaderAPI_WritePage ++ BootloaderAPI_FillWord_Trampoline: ++ jmp BootloaderAPI_FillWord ++ BootloaderAPI_ReadSignature_Trampoline: ++ jmp BootloaderAPI_ReadSignature ++ BootloaderAPI_ReadFuse_Trampoline: ++ jmp BootloaderAPI_ReadFuse ++ BootloaderAPI_ReadLock_Trampoline: ++ jmp BootloaderAPI_ReadLock ++ BootloaderAPI_WriteLock_Trampoline: ++ jmp BootloaderAPI_WriteLock ++ BootloaderAPI_UNUSED1: ++ ret ++ BootloaderAPI_UNUSED2: ++ ret ++ BootloaderAPI_UNUSED3: ++ ret ++ BootloaderAPI_UNUSED4: ++ ret ++ BootloaderAPI_UNUSED5: ++ ret ++ ++ ++ ++; API function jump table ++.section .apitable_jumptable, "ax" ++.global BootloaderAPI_JumpTable ++BootloaderAPI_JumpTable: ++ ++ rjmp BootloaderAPI_ErasePage_Trampoline ++ rjmp BootloaderAPI_WritePage_Trampoline ++ rjmp BootloaderAPI_FillWord_Trampoline ++ rjmp BootloaderAPI_ReadSignature_Trampoline ++ rjmp BootloaderAPI_ReadFuse_Trampoline ++ rjmp BootloaderAPI_ReadLock_Trampoline ++ rjmp BootloaderAPI_WriteLock_Trampoline ++ rjmp BootloaderAPI_UNUSED1 ; UNUSED ENTRY 1 ++ rjmp BootloaderAPI_UNUSED2 ; UNUSED ENTRY 2 ++ rjmp BootloaderAPI_UNUSED3 ; UNUSED ENTRY 3 ++ rjmp BootloaderAPI_UNUSED4 ; UNUSED ENTRY 4 ++ rjmp BootloaderAPI_UNUSED5 ; UNUSED ENTRY 5 ++ ++ ++ ++; Bootloader table signatures and information ++.section .apitable_signatures, "ax" ++.global BootloaderAPI_Signatures ++BootloaderAPI_Signatures: ++ ++ .long BOOT_START_ADDR ; Start address of the bootloader ++ .word 0xDF00 ; Signature for the CDC class bootloader ++ .word 0xDCFB ; Signature for a LUFA class bootloader diff --cc lib/lufa/Bootloaders/CDC/BootloaderCDC.c index 000000000,000000000..aa17bc15b new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/CDC/BootloaderCDC.c @@@ -1,0 -1,0 +1,673 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * Main source file for the CDC class bootloader. This file contains the complete bootloader logic. ++ */ ++ ++#define INCLUDE_FROM_BOOTLOADERCDC_C ++#include "BootloaderCDC.h" ++ ++/** Contains the current baud rate and other settings of the first virtual serial port. This must be retained as some ++ * operating systems will not open the port unless the settings can be set successfully. ++ */ ++static CDC_LineEncoding_t LineEncoding = { .BaudRateBPS = 0, ++ .CharFormat = CDC_LINEENCODING_OneStopBit, ++ .ParityType = CDC_PARITY_None, ++ .DataBits = 8 }; ++ ++/** Current address counter. This stores the current address of the FLASH or EEPROM as set by the host, ++ * and is used when reading or writing to the AVRs memory (either FLASH or EEPROM depending on the issued ++ * command.) ++ */ ++static uint32_t CurrAddress; ++ ++/** Flag to indicate if the bootloader should be running, or should exit and allow the application code to run ++ * via a watchdog reset. When cleared the bootloader will exit, starting the watchdog and entering an infinite ++ * loop until the AVR restarts and the application runs. ++ */ ++static bool RunBootloader = true; ++ ++/** Magic lock for forced application start. If the HWBE fuse is programmed and BOOTRST is unprogrammed, the bootloader ++ * will start if the /HWB line of the AVR is held low and the system is reset. However, if the /HWB line is still held ++ * low when the application attempts to start via a watchdog reset, the bootloader will re-start. If set to the value ++ * \ref MAGIC_BOOT_KEY the special init function \ref Application_Jump_Check() will force the application to start. ++ */ ++uint16_t MagicBootKey ATTR_NO_INIT; ++ ++ ++/** Special startup routine to check if the bootloader was started via a watchdog reset, and if the magic application ++ * start key has been loaded into \ref MagicBootKey. If the bootloader started via the watchdog and the key is valid, ++ * this will force the user application to start via a software jump. ++ */ ++void Application_Jump_Check(void) ++{ ++ bool JumpToApplication = false; ++ ++ #if (BOARD == BOARD_LEONARDO) ++ /* Enable pull-up on the IO13 pin so we can use it to select the mode */ ++ PORTC |= (1 << 7); ++ Delay_MS(10); ++ ++ /* If IO13 is not jumpered to ground, start the user application instead */ ++ JumpToApplication = ((PINC & (1 << 7)) != 0); ++ ++ /* Disable pull-up after the check has completed */ ++ PORTC &= ~(1 << 7); ++ #elif ((BOARD == BOARD_XPLAIN) || (BOARD == BOARD_XPLAIN_REV1)) ++ /* Disable JTAG debugging */ ++ JTAG_DISABLE(); ++ ++ /* Enable pull-up on the JTAG TCK pin so we can use it to select the mode */ ++ PORTF |= (1 << 4); ++ Delay_MS(10); ++ ++ /* If the TCK pin is not jumpered to ground, start the user application instead */ ++ JumpToApplication = ((PINF & (1 << 4)) != 0); ++ ++ /* Re-enable JTAG debugging */ ++ JTAG_ENABLE(); ++ #else ++ /* Check if the device's BOOTRST fuse is set */ ++ if (boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS) & FUSE_BOOTRST) ++ { ++ /* If the reset source was not an external reset or the key is correct, clear it and jump to the application */ ++ if (!(MCUSR & (1 << EXTRF)) || (MagicBootKey == MAGIC_BOOT_KEY)) ++ JumpToApplication = true; ++ ++ /* Clear reset source */ ++ MCUSR &= ~(1 << EXTRF); ++ } ++ else ++ { ++ /* If the reset source was the bootloader and the key is correct, clear it and jump to the application; ++ * this can happen in the HWBE fuse is set, and the HBE pin is low during the watchdog reset */ ++ if ((MCUSR & (1 << WDRF)) && (MagicBootKey == MAGIC_BOOT_KEY)) ++ JumpToApplication = true; ++ ++ /* Clear reset source */ ++ MCUSR &= ~(1 << WDRF); ++ } ++ #endif ++ ++ /* Don't run the user application if the reset vector is blank (no app loaded) */ ++ bool ApplicationValid = (pgm_read_word_near(0) != 0xFFFF); ++ ++ /* If a request has been made to jump to the user application, honor it */ ++ if (JumpToApplication && ApplicationValid) ++ { ++ /* Turn off the watchdog */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Clear the boot key and jump to the user application */ ++ MagicBootKey = 0; ++ ++ // cppcheck-suppress constStatement ++ ((void (*)(void))0x0000)(); ++ } ++} ++ ++/** Main program entry point. This routine configures the hardware required by the bootloader, then continuously ++ * runs the bootloader processing routine until instructed to soft-exit, or hard-reset via the watchdog to start ++ * the loaded application code. ++ */ ++int main(void) ++{ ++ /* Setup hardware required for the bootloader */ ++ SetupHardware(); ++ ++ /* Turn on first LED on the board to indicate that the bootloader has started */ ++ LEDs_SetAllLEDs(LEDS_LED1); ++ ++ /* Enable global interrupts so that the USB stack can function */ ++ GlobalInterruptEnable(); ++ ++ while (RunBootloader) ++ { ++ CDC_Task(); ++ USB_USBTask(); ++ } ++ ++ /* Wait a short time to end all USB transactions and then disconnect */ ++ _delay_us(1000); ++ ++ /* Disconnect from the host - USB interface will be reset later along with the AVR */ ++ USB_Detach(); ++ ++ /* Unlock the forced application start mode of the bootloader if it is restarted */ ++ MagicBootKey = MAGIC_BOOT_KEY; ++ ++ /* Enable the watchdog and force a timeout to reset the AVR */ ++ wdt_enable(WDTO_250MS); ++ ++ for (;;); ++} ++ ++/** Configures all hardware required for the bootloader. */ ++static void SetupHardware(void) ++{ ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++ ++ /* Relocate the interrupt vector table to the bootloader section */ ++ MCUCR = (1 << IVCE); ++ MCUCR = (1 << IVSEL); ++ ++ /* Initialize the USB and other board hardware drivers */ ++ USB_Init(); ++ LEDs_Init(); ++ ++ /* Bootloader active LED toggle timer initialization */ ++ TIMSK1 = (1 << TOIE1); ++ TCCR1B = ((1 << CS11) | (1 << CS10)); ++} ++ ++/** ISR to periodically toggle the LEDs on the board to indicate that the bootloader is active. */ ++ISR(TIMER1_OVF_vect, ISR_BLOCK) ++{ ++ LEDs_ToggleLEDs(LEDS_LED1 | LEDS_LED2); ++} ++ ++/** Event handler for the USB_ConfigurationChanged event. This configures the device's endpoints ready ++ * to relay data to and from the attached USB host. ++ */ ++void EVENT_USB_Device_ConfigurationChanged(void) ++{ ++ /* Setup CDC Notification, Rx and Tx Endpoints */ ++ Endpoint_ConfigureEndpoint(CDC_NOTIFICATION_EPADDR, EP_TYPE_INTERRUPT, ++ CDC_NOTIFICATION_EPSIZE, 1); ++ ++ Endpoint_ConfigureEndpoint(CDC_TX_EPADDR, EP_TYPE_BULK, CDC_TXRX_EPSIZE, 1); ++ ++ Endpoint_ConfigureEndpoint(CDC_RX_EPADDR, EP_TYPE_BULK, CDC_TXRX_EPSIZE, 1); ++} ++ ++/** Event handler for the USB_ControlRequest event. This is used to catch and process control requests sent to ++ * the device from the USB host before passing along unhandled control requests to the library for processing ++ * internally. ++ */ ++void EVENT_USB_Device_ControlRequest(void) ++{ ++ /* Ignore any requests that aren't directed to the CDC interface */ ++ if ((USB_ControlRequest.bmRequestType & (CONTROL_REQTYPE_TYPE | CONTROL_REQTYPE_RECIPIENT)) != ++ (REQTYPE_CLASS | REQREC_INTERFACE)) ++ { ++ return; ++ } ++ ++ /* Activity - toggle indicator LEDs */ ++ LEDs_ToggleLEDs(LEDS_LED1 | LEDS_LED2); ++ ++ /* Process CDC specific control requests */ ++ switch (USB_ControlRequest.bRequest) ++ { ++ case CDC_REQ_GetLineEncoding: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) ++ { ++ Endpoint_ClearSETUP(); ++ ++ /* Write the line coding data to the control endpoint */ ++ Endpoint_Write_Control_Stream_LE(&LineEncoding, sizeof(CDC_LineEncoding_t)); ++ Endpoint_ClearOUT(); ++ } ++ ++ break; ++ case CDC_REQ_SetLineEncoding: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) ++ { ++ Endpoint_ClearSETUP(); ++ ++ /* Read the line coding data in from the host into the global struct */ ++ Endpoint_Read_Control_Stream_LE(&LineEncoding, sizeof(CDC_LineEncoding_t)); ++ Endpoint_ClearIN(); ++ } ++ ++ break; ++ case CDC_REQ_SetControlLineState: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) ++ { ++ Endpoint_ClearSETUP(); ++ Endpoint_ClearStatusStage(); ++ } ++ ++ break; ++ } ++} ++ ++#if !defined(NO_BLOCK_SUPPORT) ++/** Reads or writes a block of EEPROM or FLASH memory to or from the appropriate CDC data endpoint, depending ++ * on the AVR109 protocol command issued. ++ * ++ * \param[in] Command Single character AVR109 protocol command indicating what memory operation to perform ++ */ ++static void ReadWriteMemoryBlock(const uint8_t Command) ++{ ++ uint16_t BlockSize; ++ char MemoryType; ++ ++ uint8_t HighByte = 0; ++ uint8_t LowByte = 0; ++ ++ BlockSize = (FetchNextCommandByte() << 8); ++ BlockSize |= FetchNextCommandByte(); ++ ++ MemoryType = FetchNextCommandByte(); ++ ++ if ((MemoryType != MEMORY_TYPE_FLASH) && (MemoryType != MEMORY_TYPE_EEPROM)) ++ { ++ /* Send error byte back to the host */ ++ WriteNextResponseByte('?'); ++ ++ return; ++ } ++ ++ /* Check if command is to read a memory block */ ++ if (Command == AVR109_COMMAND_BlockRead) ++ { ++ /* Re-enable RWW section */ ++ boot_rww_enable(); ++ ++ while (BlockSize--) ++ { ++ if (MemoryType == MEMORY_TYPE_FLASH) ++ { ++ /* Read the next FLASH byte from the current FLASH page */ ++ #if (FLASHEND > 0xFFFF) ++ WriteNextResponseByte(pgm_read_byte_far(CurrAddress | HighByte)); ++ #else ++ WriteNextResponseByte(pgm_read_byte(CurrAddress | HighByte)); ++ #endif ++ ++ /* If both bytes in current word have been read, increment the address counter */ ++ if (HighByte) ++ CurrAddress += 2; ++ ++ HighByte = !HighByte; ++ } ++ else ++ { ++ /* Read the next EEPROM byte into the endpoint */ ++ WriteNextResponseByte(eeprom_read_byte((uint8_t*)(intptr_t)(CurrAddress >> 1))); ++ ++ /* Increment the address counter after use */ ++ CurrAddress += 2; ++ } ++ } ++ } ++ else ++ { ++ uint32_t PageStartAddress = CurrAddress; ++ ++ if (MemoryType == MEMORY_TYPE_FLASH) ++ { ++ boot_page_erase(PageStartAddress); ++ boot_spm_busy_wait(); ++ } ++ ++ while (BlockSize--) ++ { ++ if (MemoryType == MEMORY_TYPE_FLASH) ++ { ++ /* If both bytes in current word have been written, increment the address counter */ ++ if (HighByte) ++ { ++ /* Write the next FLASH word to the current FLASH page */ ++ boot_page_fill(CurrAddress, ((FetchNextCommandByte() << 8) | LowByte)); ++ ++ /* Increment the address counter after use */ ++ CurrAddress += 2; ++ } ++ else ++ { ++ LowByte = FetchNextCommandByte(); ++ } ++ ++ HighByte = !HighByte; ++ } ++ else ++ { ++ /* Write the next EEPROM byte from the endpoint */ ++ eeprom_update_byte((uint8_t*)((intptr_t)(CurrAddress >> 1)), FetchNextCommandByte()); ++ ++ /* Increment the address counter after use */ ++ CurrAddress += 2; ++ } ++ } ++ ++ /* If in FLASH programming mode, commit the page after writing */ ++ if (MemoryType == MEMORY_TYPE_FLASH) ++ { ++ /* Commit the flash page to memory */ ++ boot_page_write(PageStartAddress); ++ ++ /* Wait until write operation has completed */ ++ boot_spm_busy_wait(); ++ } ++ ++ /* Send response byte back to the host */ ++ WriteNextResponseByte('\r'); ++ } ++} ++#endif ++ ++/** Retrieves the next byte from the host in the CDC data OUT endpoint, and clears the endpoint bank if needed ++ * to allow reception of the next data packet from the host. ++ * ++ * \return Next received byte from the host in the CDC data OUT endpoint ++ */ ++static uint8_t FetchNextCommandByte(void) ++{ ++ /* Select the OUT endpoint so that the next data byte can be read */ ++ Endpoint_SelectEndpoint(CDC_RX_EPADDR); ++ ++ /* If OUT endpoint empty, clear it and wait for the next packet from the host */ ++ while (!(Endpoint_IsReadWriteAllowed())) ++ { ++ Endpoint_ClearOUT(); ++ ++ while (!(Endpoint_IsOUTReceived())) ++ { ++ if (USB_DeviceState == DEVICE_STATE_Unattached) ++ return 0; ++ } ++ } ++ ++ /* Fetch the next byte from the OUT endpoint */ ++ return Endpoint_Read_8(); ++} ++ ++/** Writes the next response byte to the CDC data IN endpoint, and sends the endpoint back if needed to free up the ++ * bank when full ready for the next byte in the packet to the host. ++ * ++ * \param[in] Response Next response byte to send to the host ++ */ ++static void WriteNextResponseByte(const uint8_t Response) ++{ ++ /* Select the IN endpoint so that the next data byte can be written */ ++ Endpoint_SelectEndpoint(CDC_TX_EPADDR); ++ ++ /* If IN endpoint full, clear it and wait until ready for the next packet to the host */ ++ if (!(Endpoint_IsReadWriteAllowed())) ++ { ++ Endpoint_ClearIN(); ++ ++ while (!(Endpoint_IsINReady())) ++ { ++ if (USB_DeviceState == DEVICE_STATE_Unattached) ++ return; ++ } ++ } ++ ++ /* Write the next byte to the IN endpoint */ ++ Endpoint_Write_8(Response); ++} ++ ++/** Task to read in AVR109 commands from the CDC data OUT endpoint, process them, perform the required actions ++ * and send the appropriate response back to the host. ++ */ ++static void CDC_Task(void) ++{ ++ /* Select the OUT endpoint */ ++ Endpoint_SelectEndpoint(CDC_RX_EPADDR); ++ ++ /* Check if endpoint has a command in it sent from the host */ ++ if (!(Endpoint_IsOUTReceived())) ++ return; ++ ++ /* Read in the bootloader command (first byte sent from host) */ ++ uint8_t Command = FetchNextCommandByte(); ++ ++ if (Command == AVR109_COMMAND_ExitBootloader) ++ { ++ RunBootloader = false; ++ ++ /* Send confirmation byte back to the host */ ++ WriteNextResponseByte('\r'); ++ } ++ else if ((Command == AVR109_COMMAND_SetLED) || (Command == AVR109_COMMAND_ClearLED) || ++ (Command == AVR109_COMMAND_SelectDeviceType)) ++ { ++ FetchNextCommandByte(); ++ ++ /* Send confirmation byte back to the host */ ++ WriteNextResponseByte('\r'); ++ } ++ else if ((Command == AVR109_COMMAND_EnterProgrammingMode) || (Command == AVR109_COMMAND_LeaveProgrammingMode)) ++ { ++ /* Send confirmation byte back to the host */ ++ WriteNextResponseByte('\r'); ++ } ++ else if (Command == AVR109_COMMAND_ReadPartCode) ++ { ++ /* Return ATMEGA128 part code - this is only to allow AVRProg to use the bootloader */ ++ WriteNextResponseByte(0x44); ++ WriteNextResponseByte(0x00); ++ } ++ else if (Command == AVR109_COMMAND_ReadAutoAddressIncrement) ++ { ++ /* Indicate auto-address increment is supported */ ++ WriteNextResponseByte('Y'); ++ } ++ else if (Command == AVR109_COMMAND_SetCurrentAddress) ++ { ++ /* Set the current address to that given by the host (translate 16-bit word address to byte address) */ ++ CurrAddress = (FetchNextCommandByte() << 9); ++ CurrAddress |= (FetchNextCommandByte() << 1); ++ ++ /* Send confirmation byte back to the host */ ++ WriteNextResponseByte('\r'); ++ } ++ else if (Command == AVR109_COMMAND_ReadBootloaderInterface) ++ { ++ /* Indicate serial programmer back to the host */ ++ WriteNextResponseByte('S'); ++ } ++ else if (Command == AVR109_COMMAND_ReadBootloaderIdentifier) ++ { ++ /* Write the 7-byte software identifier to the endpoint */ ++ for (uint8_t CurrByte = 0; CurrByte < 7; CurrByte++) ++ WriteNextResponseByte(SOFTWARE_IDENTIFIER[CurrByte]); ++ } ++ else if (Command == AVR109_COMMAND_ReadBootloaderSWVersion) ++ { ++ WriteNextResponseByte('0' + BOOTLOADER_VERSION_MAJOR); ++ WriteNextResponseByte('0' + BOOTLOADER_VERSION_MINOR); ++ } ++ else if (Command == AVR109_COMMAND_ReadSignature) ++ { ++ WriteNextResponseByte(AVR_SIGNATURE_3); ++ WriteNextResponseByte(AVR_SIGNATURE_2); ++ WriteNextResponseByte(AVR_SIGNATURE_1); ++ } ++ else if (Command == AVR109_COMMAND_EraseFLASH) ++ { ++ /* Clear the application section of flash */ ++ for (uint32_t CurrFlashAddress = 0; CurrFlashAddress < (uint32_t)BOOT_START_ADDR; CurrFlashAddress += SPM_PAGESIZE) ++ { ++ boot_page_erase(CurrFlashAddress); ++ boot_spm_busy_wait(); ++ boot_page_write(CurrFlashAddress); ++ boot_spm_busy_wait(); ++ } ++ ++ /* Send confirmation byte back to the host */ ++ WriteNextResponseByte('\r'); ++ } ++ #if !defined(NO_LOCK_BYTE_WRITE_SUPPORT) ++ else if (Command == AVR109_COMMAND_WriteLockbits) ++ { ++ /* Set the lock bits to those given by the host */ ++ boot_lock_bits_set(FetchNextCommandByte()); ++ ++ /* Send confirmation byte back to the host */ ++ WriteNextResponseByte('\r'); ++ } ++ #endif ++ else if (Command == AVR109_COMMAND_ReadLockbits) ++ { ++ WriteNextResponseByte(boot_lock_fuse_bits_get(GET_LOCK_BITS)); ++ } ++ else if (Command == AVR109_COMMAND_ReadLowFuses) ++ { ++ WriteNextResponseByte(boot_lock_fuse_bits_get(GET_LOW_FUSE_BITS)); ++ } ++ else if (Command == AVR109_COMMAND_ReadHighFuses) ++ { ++ WriteNextResponseByte(boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS)); ++ } ++ else if (Command == AVR109_COMMAND_ReadExtendedFuses) ++ { ++ WriteNextResponseByte(boot_lock_fuse_bits_get(GET_EXTENDED_FUSE_BITS)); ++ } ++ #if !defined(NO_BLOCK_SUPPORT) ++ else if (Command == AVR109_COMMAND_GetBlockWriteSupport) ++ { ++ WriteNextResponseByte('Y'); ++ ++ /* Send block size to the host */ ++ WriteNextResponseByte(SPM_PAGESIZE >> 8); ++ WriteNextResponseByte(SPM_PAGESIZE & 0xFF); ++ } ++ else if ((Command == AVR109_COMMAND_BlockWrite) || (Command == AVR109_COMMAND_BlockRead)) ++ { ++ /* Delegate the block write/read to a separate function for clarity */ ++ ReadWriteMemoryBlock(Command); ++ } ++ #endif ++ #if !defined(NO_FLASH_BYTE_SUPPORT) ++ else if (Command == AVR109_COMMAND_FillFlashPageWordHigh) ++ { ++ /* Write the high byte to the current flash page */ ++ boot_page_fill(CurrAddress, FetchNextCommandByte()); ++ ++ /* Send confirmation byte back to the host */ ++ WriteNextResponseByte('\r'); ++ } ++ else if (Command == AVR109_COMMAND_FillFlashPageWordLow) ++ { ++ /* Write the low byte to the current flash page */ ++ boot_page_fill(CurrAddress | 0x01, FetchNextCommandByte()); ++ ++ /* Increment the address */ ++ CurrAddress += 2; ++ ++ /* Send confirmation byte back to the host */ ++ WriteNextResponseByte('\r'); ++ } ++ else if (Command == AVR109_COMMAND_WriteFlashPage) ++ { ++ /* Commit the flash page to memory */ ++ boot_page_write(CurrAddress); ++ ++ /* Wait until write operation has completed */ ++ boot_spm_busy_wait(); ++ ++ /* Send confirmation byte back to the host */ ++ WriteNextResponseByte('\r'); ++ } ++ else if (Command == AVR109_COMMAND_ReadFLASHWord) ++ { ++ #if (FLASHEND > 0xFFFF) ++ uint16_t ProgramWord = pgm_read_word_far(CurrAddress); ++ #else ++ uint16_t ProgramWord = pgm_read_word(CurrAddress); ++ #endif ++ ++ WriteNextResponseByte(ProgramWord >> 8); ++ WriteNextResponseByte(ProgramWord & 0xFF); ++ } ++ #endif ++ #if !defined(NO_EEPROM_BYTE_SUPPORT) ++ else if (Command == AVR109_COMMAND_WriteEEPROM) ++ { ++ /* Read the byte from the endpoint and write it to the EEPROM */ ++ eeprom_update_byte((uint8_t*)((intptr_t)(CurrAddress >> 1)), FetchNextCommandByte()); ++ ++ /* Increment the address after use */ ++ CurrAddress += 2; ++ ++ /* Send confirmation byte back to the host */ ++ WriteNextResponseByte('\r'); ++ } ++ else if (Command == AVR109_COMMAND_ReadEEPROM) ++ { ++ /* Read the EEPROM byte and write it to the endpoint */ ++ WriteNextResponseByte(eeprom_read_byte((uint8_t*)((intptr_t)(CurrAddress >> 1)))); ++ ++ /* Increment the address after use */ ++ CurrAddress += 2; ++ } ++ #endif ++ else if (Command != AVR109_COMMAND_Sync) ++ { ++ /* Unknown (non-sync) command, return fail code */ ++ WriteNextResponseByte('?'); ++ } ++ ++ /* Select the IN endpoint */ ++ Endpoint_SelectEndpoint(CDC_TX_EPADDR); ++ ++ /* Remember if the endpoint is completely full before clearing it */ ++ bool IsEndpointFull = !(Endpoint_IsReadWriteAllowed()); ++ ++ /* Send the endpoint data to the host */ ++ Endpoint_ClearIN(); ++ ++ /* If a full endpoint's worth of data was sent, we need to send an empty packet afterwards to signal end of transfer */ ++ if (IsEndpointFull) ++ { ++ while (!(Endpoint_IsINReady())) ++ { ++ if (USB_DeviceState == DEVICE_STATE_Unattached) ++ return; ++ } ++ ++ Endpoint_ClearIN(); ++ } ++ ++ /* Wait until the data has been sent to the host */ ++ while (!(Endpoint_IsINReady())) ++ { ++ if (USB_DeviceState == DEVICE_STATE_Unattached) ++ return; ++ } ++ ++ /* Select the OUT endpoint */ ++ Endpoint_SelectEndpoint(CDC_RX_EPADDR); ++ ++ /* Acknowledge the command from the host */ ++ Endpoint_ClearOUT(); ++} diff --cc lib/lufa/Bootloaders/CDC/BootloaderCDC.h index 000000000,000000000..b6543aa73 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/CDC/BootloaderCDC.h @@@ -1,0 -1,0 +1,144 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * Header file for BootloaderCDC.c. ++ */ ++ ++#ifndef _CDC_H_ ++#define _CDC_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/boot.h> ++ #include <avr/eeprom.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <stdbool.h> ++ ++ #include "Descriptors.h" ++ #include "BootloaderAPI.h" ++ #include "Config/AppConfig.h" ++ ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Platform/Platform.h> ++ ++ /* Preprocessor Checks: */ ++ #if !defined(__OPTIMIZE_SIZE__) ++ #error This bootloader requires that it be optimized for size, not speed, to fit into the target device. Change optimization settings and try again. ++ #endif ++ ++ /* Macros: */ ++ /** Version major of the CDC bootloader. */ ++ #define BOOTLOADER_VERSION_MAJOR 0x01 ++ ++ /** Version minor of the CDC bootloader. */ ++ #define BOOTLOADER_VERSION_MINOR 0x00 ++ ++ /** Hardware version major of the CDC bootloader. */ ++ #define BOOTLOADER_HWVERSION_MAJOR 0x01 ++ ++ /** Hardware version minor of the CDC bootloader. */ ++ #define BOOTLOADER_HWVERSION_MINOR 0x00 ++ ++ /** Eight character bootloader firmware identifier reported to the host when requested. */ ++ #define SOFTWARE_IDENTIFIER "LUFACDC" ++ ++ /** Magic bootloader key to unlock forced application start mode. */ ++ #define MAGIC_BOOT_KEY 0xDC42 ++ ++ /* Enums: */ ++ /** Possible memory types that can be addressed via the bootloader. */ ++ enum AVR109_Memories ++ { ++ MEMORY_TYPE_FLASH = 'F', ++ MEMORY_TYPE_EEPROM = 'E', ++ }; ++ ++ /** Possible commands that can be issued to the bootloader. */ ++ enum AVR109_Commands ++ { ++ AVR109_COMMAND_Sync = 27, ++ AVR109_COMMAND_ReadEEPROM = 'd', ++ AVR109_COMMAND_WriteEEPROM = 'D', ++ AVR109_COMMAND_ReadFLASHWord = 'R', ++ AVR109_COMMAND_WriteFlashPage = 'm', ++ AVR109_COMMAND_FillFlashPageWordLow = 'c', ++ AVR109_COMMAND_FillFlashPageWordHigh = 'C', ++ AVR109_COMMAND_GetBlockWriteSupport = 'b', ++ AVR109_COMMAND_BlockWrite = 'B', ++ AVR109_COMMAND_BlockRead = 'g', ++ AVR109_COMMAND_ReadExtendedFuses = 'Q', ++ AVR109_COMMAND_ReadHighFuses = 'N', ++ AVR109_COMMAND_ReadLowFuses = 'F', ++ AVR109_COMMAND_ReadLockbits = 'r', ++ AVR109_COMMAND_WriteLockbits = 'l', ++ AVR109_COMMAND_EraseFLASH = 'e', ++ AVR109_COMMAND_ReadSignature = 's', ++ AVR109_COMMAND_ReadBootloaderSWVersion = 'V', ++ AVR109_COMMAND_ReadBootloaderHWVersion = 'v', ++ AVR109_COMMAND_ReadBootloaderIdentifier = 'S', ++ AVR109_COMMAND_ReadBootloaderInterface = 'p', ++ AVR109_COMMAND_SetCurrentAddress = 'A', ++ AVR109_COMMAND_ReadAutoAddressIncrement = 'a', ++ AVR109_COMMAND_ReadPartCode = 't', ++ AVR109_COMMAND_EnterProgrammingMode = 'P', ++ AVR109_COMMAND_LeaveProgrammingMode = 'L', ++ AVR109_COMMAND_SelectDeviceType = 'T', ++ AVR109_COMMAND_SetLED = 'x', ++ AVR109_COMMAND_ClearLED = 'y', ++ AVR109_COMMAND_ExitBootloader = 'E', ++ }; ++ ++ /* Type Defines: */ ++ /** Type define for a non-returning pointer to the start of the loaded application in flash memory. */ ++ typedef void (*AppPtr_t)(void) ATTR_NO_RETURN; ++ ++ /* Function Prototypes: */ ++ static void CDC_Task(void); ++ static void SetupHardware(void); ++ ++ void Application_Jump_Check(void) ATTR_INIT_SECTION(3); ++ ++ void EVENT_USB_Device_ConfigurationChanged(void); ++ ++ #if defined(INCLUDE_FROM_BOOTLOADERCDC_C) || defined(__DOXYGEN__) ++ #if !defined(NO_BLOCK_SUPPORT) ++ static void ReadWriteMemoryBlock(const uint8_t Command); ++ #endif ++ static uint8_t FetchNextCommandByte(void); ++ static void WriteNextResponseByte(const uint8_t Response); ++ #endif ++ ++#endif ++ diff --cc lib/lufa/Bootloaders/CDC/BootloaderCDC.txt index 000000000,000000000..f8c349cde new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/CDC/BootloaderCDC.txt @@@ -1,0 -1,0 +1,242 @@@ ++/** \file ++ * ++ * This file contains special DoxyGen information for the generation of the main page and other special ++ * documentation pages. It is not a project source file. ++ */ ++ ++/** \mainpage CDC Class USB AVR Bootloader ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * \li Series 6 USB AVRs (AT90USBxxx6) ++ * \li Series 4 USB AVRs (ATMEGAxxU4) ++ * \li Series 2 USB AVRs (AT90USBxx2, ATMEGAxxU2) ++ * ++ * \section Sec_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> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>Abstract Control Model (ACM)</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF CDC Class Standard</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * This bootloader enumerates to the host as a CDC Class device (virtual serial port), allowing for AVR109 ++ * protocol compatible programming software to load firmware onto the AVR. ++ * ++ * Out of the box this bootloader builds for the AT90USB1287 with an 8KB bootloader section size, and will fit ++ * into 4KB of bootloader space. If you wish to alter this size and/or change the AVR model, you will need to ++ * edit the MCU, FLASH_SIZE_KB and BOOT_SECTION_SIZE_KB values in the accompanying makefile. ++ * ++ * When the bootloader is running, the board's LED(s) will flash at regular intervals to distinguish the ++ * bootloader from the normal user application. ++ * ++ * \warning <b>THIS BOOTLOADER IS NOT SECURE.</b> Malicious entities can recover written data, even if the device ++ * lockbits are set. ++ * ++ * \section Sec_Running Running the Bootloader ++ * ++ * On the USB AVR8 devices, setting the \c HWBE device fuse will cause the bootloader to run if the \c HWB pin of ++ * the AVR is grounded when the device is reset. ++ * ++ * The are two behaviours of this bootloader, depending on the device's fuses: ++ * ++ * <b>If the device's BOOTRST fuse is set</b>, the bootloader will run any time the system is reset from ++ * the external reset pin, unless no valid user application has been loaded. To initiate the bootloader, the ++ * device's external reset pin should be grounded momentarily. ++ * ++ * <b>If the device's BOOTRST fuse is not set</b>, the bootloader will run only if initiated via a software ++ * jump, or if the \c HWB pin was low during the last device reset (if the \c HWBE fuse is set). ++ * ++ * For board specific exceptions to the above, see below. ++ * ++ * \subsection SSec_XPLAIN Atmel Xplain Board ++ * Ground the USB AVR JTAG's \c TCK pin to ground when powering on the board to start the bootloader. This assumes the ++ * \c HWBE fuse is cleared and the \c BOOTRST fuse is set as the HWBE pin is not user accessible on this board. ++ * ++ * \subsection SSec_Leonardo Arduino Leonardo Board ++ * Ground \c IO13 when powering the board to start the bootloader. This assumes the \c HWBE fuse is cleared and the ++ * \c BOOTRST fuse is set as the HWBE pin is not user accessible on this board. ++ * ++ * \section Sec_Installation Driver Installation ++ * ++ * After running this bootloader for the first time on a new computer, you will need to supply the .INF ++ * file located in this bootloader 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 Sec_HostApp Host Controller Application ++ * ++ * This bootloader is compatible with the open source application AVRDUDE, Atmel's AVRPROG, or other ++ * applications implementing the AVR109 protocol, which is documented on the Atmel website as an application ++ * note. ++ * ++ * \subsection SSec_AVRDude AVRDUDE (Windows, Mac, Linux) ++ * ++ * AVRDude is a free, cross-platform and open source command line programmer for Atmel and third party AVR ++ * programmers. It is available on the the Windows platform as part of the "WinAVR" package, or on other systems ++ * either from a build from the official source code, or in many distributions as a precompiled binary package. ++ * ++ * To load a new HEX file with AVRDude, specify "AVR109" as the programmer, with the allocated COM port. On Windows ++ * platforms this will be a COMx port name: ++ * \code ++ * avrdude -c AVR109 -p at90usb1287 -P COM0 -U flash:w:Mouse.hex ++ * \endcode ++ * ++ * On Linux systems, this will typically be a /dev/ttyACMx port name: ++ * \code ++ * avrdude -c AVR109 -p at90usb1287 -P /dev/ttyACM0 -U flash:w:Mouse.hex ++ * \endcode ++ * ++ * Refer to the AVRDude project documentation for additional usage instructions. ++ * ++ * \section Sec_API User Application API ++ * ++ * Several user application functions for FLASH and other special memory area manipulations are exposed by the bootloader, ++ * allowing the user application to call into the bootloader at runtime to read and write FLASH data. ++ * ++ * By default, the bootloader API jump table is located 32 bytes from the end of the device's FLASH memory, and follows the ++ * following layout: ++ * ++ * \code ++ * #define BOOTLOADER_API_TABLE_SIZE 32 ++ * #define BOOTLOADER_API_TABLE_START ((FLASHEND + 1UL) - BOOTLOADER_API_TABLE_SIZE) ++ * #define BOOTLOADER_API_CALL(Index) (void*)((BOOTLOADER_API_TABLE_START + (Index * 2)) / 2) ++ * ++ * void (*BootloaderAPI_ErasePage)(uint32_t Address) = BOOTLOADER_API_CALL(0); ++ * void (*BootloaderAPI_WritePage)(uint32_t Address) = BOOTLOADER_API_CALL(1); ++ * void (*BootloaderAPI_FillWord)(uint32_t Address, uint16_t Word) = BOOTLOADER_API_CALL(2); ++ * uint8_t (*BootloaderAPI_ReadSignature)(uint16_t Address) = BOOTLOADER_API_CALL(3); ++ * uint8_t (*BootloaderAPI_ReadFuse)(uint16_t Address) = BOOTLOADER_API_CALL(4); ++ * uint8_t (*BootloaderAPI_ReadLock)(void) = BOOTLOADER_API_CALL(5); ++ * void (*BootloaderAPI_WriteLock)(uint8_t LockBits) = BOOTLOADER_API_CALL(6); ++ * ++ * #define BOOTLOADER_MAGIC_SIGNATURE_START (BOOTLOADER_API_TABLE_START + (BOOTLOADER_API_TABLE_SIZE - 2)) ++ * #define BOOTLOADER_MAGIC_SIGNATURE 0xDCFB ++ * ++ * #define BOOTLOADER_CLASS_SIGNATURE_START (BOOTLOADER_API_TABLE_START + (BOOTLOADER_API_TABLE_SIZE - 4)) ++ * #define BOOTLOADER_CDC_SIGNATURE 0xDF00 ++ * ++ * #define BOOTLOADER_ADDRESS_START (BOOTLOADER_API_TABLE_START + (BOOTLOADER_API_TABLE_SIZE - 8)) ++ * #define BOOTLOADER_ADDRESS_LENGTH 4 ++ * \endcode ++ * ++ * From the application the API support of the bootloader can be detected by reading the FLASH memory bytes located at address ++ * \c BOOTLOADER_MAGIC_SIGNATURE_START and comparing them to the value \c BOOTLOADER_MAGIC_SIGNATURE. The class of bootloader ++ * can be determined by reading the FLASH memory bytes located at address \c BOOTLOADER_CLASS_SIGNATURE_START and comparing them ++ * to the value \c BOOTLOADER_CDC_SIGNATURE. The start address of the bootloader can be retrieved by reading the bytes of FLASH ++ * memory starting from address \c BOOTLOADER_ADDRESS_START. ++ * ++ * \subsection SSec_API_MemLayout Device Memory Map ++ * The following illustration indicates the final memory map of the device when loaded with the bootloader. ++ * ++ * \verbatim ++ * +----------------------------+ 0x0000 ++ * | | ++ * | | ++ * | | ++ * | | ++ * | | ++ * | | ++ * | | ++ * | | ++ * | User Application | ++ * | | ++ * | | ++ * | | ++ * | | ++ * | | ++ * | | ++ * | | ++ * +----------------------------+ FLASHEND - BOOT_SECTION_SIZE ++ * | | ++ * | Bootloader Application | ++ * | (Not User App. Accessible) | ++ * | | ++ * +----------------------------+ FLASHEND - 96 ++ * | API Table Trampolines | ++ * | (Not User App. Accessible) | ++ * +----------------------------+ FLASHEND - 32 ++ * | Bootloader API Table | ++ * | (User App. Accessible) | ++ * +----------------------------+ FLASHEND - 8 ++ * | Bootloader ID Constants | ++ * | (User App. Accessible) | ++ * +----------------------------+ FLASHEND ++ * \endverbatim ++ * ++ * \section Sec_KnownIssues Known Issues: ++ * ++ * \par On Linux machines, the CDC bootloader is unstable or inaccessible. ++ * A change to the \c ModemManager module in many Linux distributions causes ++ * this module to try to take control over inserted CDC devices, corrupting the ++ * datastream. A UDEV rule is required to prevent this. ++ * See <a href=https://groups.google.com/d/msg/lufa-support/CP9cy2bc8yo/kBqsOu-RBeMJ>here</a> for resolution steps. ++ * If the issue still persists then uninstall modemmanager by executing <tt>sudo apt-get remove modemmanager</tt>, or ++ * the equivalent using your chosen distribution's package manager. ++ * ++ * \par On Linux machines, the CDC bootloader is inaccessible. ++ * On many Linux systems, non-root users do not have automatic access to newly ++ * inserted CDC devices. Root privileges or a UDEV rule is required to gain ++ * access. ++ * See <a href=https://groups.google.com/d/msg/lufa-support/CP9cy2bc8yo/kBqsOu-RBeMJ>here</a> for resolution steps. ++ * ++ * \section Sec_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> ++ * <th><b>Define Name:</b></th> ++ * <th><b>Location:</b></th> ++ * <th><b>Description:</b></th> ++ * </tr> ++ * <tr> ++ * <td>NO_BLOCK_SUPPORT</td> ++ * <td>AppConfig.h</td> ++ * <td>Define to disable memory block read/write support in the bootloader, requiring all reads and writes to be made ++ * using the byte-level commands.</td> ++ * </tr> ++ * <tr> ++ * <td>NO_EEPROM_BYTE_SUPPORT</td> ++ * <td>AppConfig.h</td> ++ * <td>Define to disable EEPROM memory byte read/write support in the bootloader, requiring all EEPROM reads and writes ++ * to be made using the block-level commands.</td> ++ * </tr> ++ * <tr> ++ * <td>NO_FLASH_BYTE_SUPPORT</td> ++ * <td>AppConfig.h</td> ++ * <td>Define to disable FLASH memory byte read/write support in the bootloader, requiring all FLASH reads and writes ++ * to be made using the block-level commands.</td> ++ * </tr> ++ * <tr> ++ * <td>NO_LOCK_BYTE_WRITE_SUPPORT</td> ++ * <td>AppConfig.h</td> ++ * <td>Define to disable lock byte write support in the bootloader, preventing the lock bits from being set programmatically.</td> ++ * </tr> ++ * </table> ++ */ ++ diff --cc lib/lufa/Bootloaders/CDC/Config/AppConfig.h index 000000000,000000000..22972b72f new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/CDC/Config/AppConfig.h @@@ -1,0 -1,0 +1,50 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief Application Configuration Header File ++ * ++ * This is a header file which is be used to configure LUFA's ++ * compile time options, as an alternative to the compile time ++ * constants supplied through a makefile. ++ * ++ * For information on what each token does, refer to the ++ * \ref Sec_Options section of the application documentation. ++ */ ++ ++#ifndef _APP_CONFIG_H_ ++#define _APP_CONFIG_H_ ++ ++// #define NO_BLOCK_SUPPORT ++// #define NO_EEPROM_BYTE_SUPPORT ++// #define NO_FLASH_BYTE_SUPPORT ++// #define NO_LOCK_BYTE_WRITE_SUPPORT ++ ++#endif diff --cc lib/lufa/Bootloaders/CDC/Config/LUFAConfig.h index 000000000,000000000..5aa0e765b new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/CDC/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++ #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++ #define USB_DEVICE_ONLY ++// #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++ #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++ #define USE_RAM_DESCRIPTORS ++// #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++ #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++ #define DEVICE_STATE_AS_GPIOR 0 ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++ #define NO_DEVICE_REMOTE_WAKEUP ++ #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Bootloaders/CDC/Descriptors.c index 000000000,000000000..627657037 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/CDC/Descriptors.c @@@ -1,0 -1,0 +1,244 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special ++ * computer-readable structures which the host requests upon device enumeration, to determine ++ * the device's capabilities and functions. ++ */ ++ ++#include "Descriptors.h" ++ ++/** Device descriptor structure. This descriptor, located in SRAM memory, describes the overall ++ * device characteristics, including the supported USB version, control endpoint size and the ++ * number of device configurations. The descriptor is read out by the USB host when the enumeration ++ * process begins. ++ */ ++const USB_Descriptor_Device_t DeviceDescriptor = ++{ ++ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, ++ ++ .USBSpecification = VERSION_BCD(1,1,0), ++ .Class = CDC_CSCP_CDCClass, ++ .SubClass = CDC_CSCP_NoSpecificSubclass, ++ .Protocol = CDC_CSCP_NoSpecificProtocol, ++ ++ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, ++ ++ .VendorID = 0x03EB, ++ .ProductID = 0x204A, ++ .ReleaseNumber = VERSION_BCD(1,0,0), ++ ++ .ManufacturerStrIndex = STRING_ID_Manufacturer, ++ .ProductStrIndex = STRING_ID_Product, ++ .SerialNumStrIndex = NO_DESCRIPTOR, ++ ++ .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS ++}; ++ ++/** Configuration descriptor structure. This descriptor, located in SRAM memory, describes the usage ++ * of the device in one of its supported configurations, including information about any device interfaces ++ * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting ++ * a configuration so that the host may correctly communicate with the USB device. ++ */ ++const USB_Descriptor_Configuration_t ConfigurationDescriptor = ++{ ++ .Config = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration}, ++ ++ .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t), ++ .TotalInterfaces = 2, ++ ++ .ConfigurationNumber = 1, ++ .ConfigurationStrIndex = NO_DESCRIPTOR, ++ ++ .ConfigAttributes = USB_CONFIG_ATTR_RESERVED, ++ ++ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) ++ }, ++ ++ .CDC_CCI_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_CDC_CCI, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 1, ++ ++ .Class = CDC_CSCP_CDCClass, ++ .SubClass = CDC_CSCP_ACMSubclass, ++ .Protocol = CDC_CSCP_ATCommandProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .CDC_Functional_Header = ++ { ++ .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface}, ++ .Subtype = 0x00, ++ ++ .CDCSpecification = VERSION_BCD(1,1,0), ++ }, ++ ++ .CDC_Functional_ACM = ++ { ++ .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface}, ++ .Subtype = 0x02, ++ ++ .Capabilities = 0x02, ++ }, ++ ++ .CDC_Functional_Union = ++ { ++ .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface}, ++ .Subtype = 0x06, ++ ++ .MasterInterfaceNumber = INTERFACE_ID_CDC_CCI, ++ .SlaveInterfaceNumber = INTERFACE_ID_CDC_DCI, ++ }, ++ ++ .CDC_NotificationEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = CDC_NOTIFICATION_EPADDR, ++ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = CDC_NOTIFICATION_EPSIZE, ++ .PollingIntervalMS = 0xFF ++ }, ++ ++ .CDC_DCI_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_CDC_DCI, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 2, ++ ++ .Class = CDC_CSCP_CDCDataClass, ++ .SubClass = CDC_CSCP_NoDataSubclass, ++ .Protocol = CDC_CSCP_NoDataProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .CDC_DataOutEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = CDC_RX_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = CDC_TXRX_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++ ++ .CDC_DataInEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = CDC_TX_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = CDC_TXRX_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ } ++}; ++ ++/** Language descriptor structure. This descriptor, located in SRAM memory, is returned when the host requests ++ * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate ++ * via the language ID table available at USB.org what languages the device supports for its string descriptors. ++ */ ++const USB_Descriptor_String_t LanguageString = USB_STRING_DESCRIPTOR_ARRAY(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. ++ */ ++const USB_Descriptor_String_t ManufacturerString = USB_STRING_DESCRIPTOR(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. ++ */ ++const USB_Descriptor_String_t ProductString = USB_STRING_DESCRIPTOR(L"LUFA CDC"); ++ ++/** This function is called by the library when in device mode, and must be overridden (see LUFA 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 uint16_t wIndex, ++ const void** const DescriptorAddress) ++{ ++ const uint8_t DescriptorType = (wValue >> 8); ++ const uint8_t DescriptorNumber = (wValue & 0xFF); ++ ++ const void* Address = NULL; ++ uint16_t Size = NO_DESCRIPTOR; ++ ++ switch (DescriptorType) ++ { ++ case DTYPE_Device: ++ Address = &DeviceDescriptor; ++ Size = sizeof(USB_Descriptor_Device_t); ++ break; ++ case DTYPE_Configuration: ++ Address = &ConfigurationDescriptor; ++ Size = sizeof(USB_Descriptor_Configuration_t); ++ break; ++ case DTYPE_String: ++ if (DescriptorNumber == STRING_ID_Language) ++ { ++ Address = &LanguageString; ++ Size = LanguageString.Header.Size; ++ } ++ else if (DescriptorNumber == STRING_ID_Manufacturer) ++ { ++ Address = &ManufacturerString; ++ Size = ManufacturerString.Header.Size; ++ } ++ else if (DescriptorNumber == STRING_ID_Product) ++ { ++ Address = &ProductString; ++ Size = ProductString.Header.Size; ++ } ++ ++ break; ++ } ++ ++ *DescriptorAddress = Address; ++ return Size; ++} ++ diff --cc lib/lufa/Bootloaders/CDC/Descriptors.h index 000000000,000000000..a6fbf5262 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/CDC/Descriptors.h @@@ -1,0 -1,0 +1,158 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * Header file for Descriptors.c. ++ */ ++ ++#ifndef _DESCRIPTORS_H_ ++#define _DESCRIPTORS_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include "Config/AppConfig.h" ++ ++ /* Macros: */ ++ #if defined(__AVR_AT90USB1287__) ++ #define AVR_SIGNATURE_1 0x1E ++ #define AVR_SIGNATURE_2 0x97 ++ #define AVR_SIGNATURE_3 0x82 ++ #elif defined(__AVR_AT90USB647__) ++ #define AVR_SIGNATURE_1 0x1E ++ #define AVR_SIGNATURE_2 0x96 ++ #define AVR_SIGNATURE_3 0x82 ++ #elif defined(__AVR_AT90USB1286__) ++ #define AVR_SIGNATURE_1 0x1E ++ #define AVR_SIGNATURE_2 0x97 ++ #define AVR_SIGNATURE_3 0x82 ++ #elif defined(__AVR_AT90USB646__) ++ #define AVR_SIGNATURE_1 0x1E ++ #define AVR_SIGNATURE_2 0x96 ++ #define AVR_SIGNATURE_3 0x82 ++ #elif defined(__AVR_ATmega32U4__) ++ #define AVR_SIGNATURE_1 0x1E ++ #define AVR_SIGNATURE_2 0x95 ++ #define AVR_SIGNATURE_3 0x87 ++ #elif defined(__AVR_ATmega16U4__) ++ #define AVR_SIGNATURE_1 0x1E ++ #define AVR_SIGNATURE_2 0x94 ++ #define AVR_SIGNATURE_3 0x88 ++ #elif defined(__AVR_ATmega32U2__) ++ #define AVR_SIGNATURE_1 0x1E ++ #define AVR_SIGNATURE_2 0x95 ++ #define AVR_SIGNATURE_3 0x8A ++ #elif defined(__AVR_ATmega16U2__) ++ #define AVR_SIGNATURE_1 0x1E ++ #define AVR_SIGNATURE_2 0x94 ++ #define AVR_SIGNATURE_3 0x89 ++ #elif defined(__AVR_AT90USB162__) ++ #define AVR_SIGNATURE_1 0x1E ++ #define AVR_SIGNATURE_2 0x94 ++ #define AVR_SIGNATURE_3 0x82 ++ #elif defined(__AVR_ATmega8U2__) ++ #define AVR_SIGNATURE_1 0x1E ++ #define AVR_SIGNATURE_2 0x93 ++ #define AVR_SIGNATURE_3 0x89 ++ #elif defined(__AVR_AT90USB82__) ++ #define AVR_SIGNATURE_1 0x1E ++ #define AVR_SIGNATURE_2 0x93 ++ #define AVR_SIGNATURE_3 0x82 ++ #else ++ #error The selected AVR part is not currently supported by this bootloader. ++ #endif ++ ++ /** Endpoint address for the CDC control interface event notification endpoint. */ ++ #define CDC_NOTIFICATION_EPADDR (ENDPOINT_DIR_IN | 2) ++ ++ /** Endpoint address for the CDC data interface TX (data IN) endpoint. */ ++ #define CDC_TX_EPADDR (ENDPOINT_DIR_IN | 3) ++ ++ /** Endpoint address for the CDC data interface RX (data OUT) endpoint. */ ++ #define CDC_RX_EPADDR (ENDPOINT_DIR_OUT | 4) ++ ++ /** Size of the CDC data interface TX and RX data endpoint banks, in bytes. */ ++ #define CDC_TXRX_EPSIZE 16 ++ ++ /** Size of the CDC control interface notification endpoint bank, in bytes. */ ++ #define CDC_NOTIFICATION_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; ++ ++ // CDC Control Interface ++ USB_Descriptor_Interface_t CDC_CCI_Interface; ++ USB_CDC_Descriptor_FunctionalHeader_t CDC_Functional_Header; ++ USB_CDC_Descriptor_FunctionalACM_t CDC_Functional_ACM; ++ USB_CDC_Descriptor_FunctionalUnion_t CDC_Functional_Union; ++ USB_Descriptor_Endpoint_t CDC_NotificationEndpoint; ++ ++ // CDC Data Interface ++ USB_Descriptor_Interface_t CDC_DCI_Interface; ++ USB_Descriptor_Endpoint_t CDC_DataOutEndpoint; ++ USB_Descriptor_Endpoint_t CDC_DataInEndpoint; ++ } USB_Descriptor_Configuration_t; ++ ++ /** Enum for the device interface descriptor IDs within the device. Each interface descriptor ++ * should have a unique ID index associated with it, which can be used to refer to the ++ * interface from other descriptors. ++ */ ++ enum InterfaceDescriptors_t ++ { ++ INTERFACE_ID_CDC_CCI = 0, /**< CDC CCI interface descriptor ID */ ++ INTERFACE_ID_CDC_DCI = 1, /**< CDC DCI interface descriptor ID */ ++ }; ++ ++ /** Enum for the device string descriptor IDs within the device. Each string descriptor should ++ * have a unique ID index associated with it, which can be used to refer to the string from ++ * other descriptors. ++ */ ++ enum StringDescriptors_t ++ { ++ STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */ ++ STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */ ++ STRING_ID_Product = 2, /**< Product string ID */ ++ }; ++ ++ /* Function Prototypes: */ ++ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ++ const uint16_t wIndex, ++ const void** const DescriptorAddress) ++ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); ++ ++#endif ++ diff --cc lib/lufa/Bootloaders/CDC/LUFA CDC Bootloader.inf index 000000000,000000000..61624c731 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/CDC/LUFA CDC Bootloader.inf @@@ -1,0 -1,0 +1,66 @@@ ++;************************************************************ ++; Windows USB CDC ACM Setup File ++; Copyright (c) 2000 Microsoft Corporation ++;************************************************************ ++ ++[DefaultInstall] ++CopyINF="LUFA CDC Bootloader.inf" ++ ++[Version] ++Signature="$Windows NT$" ++Class=Ports ++ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} ++Provider=%MFGNAME% ++DriverVer=7/1/2012,10.0.0.0 ++ ++[Manufacturer] ++%MFGNAME%=DeviceList, NTx86, NTamd64, NTia64 ++ ++[SourceDisksNames] ++ ++[SourceDisksFiles] ++ ++[DestinationDirs] ++DefaultDestDir=12 ++ ++[DriverInstall] ++Include=mdmcpq.inf ++CopyFiles=FakeModemCopyFileSection ++AddReg=DriverInstall.AddReg ++ ++[DriverInstall.Services] ++Include=mdmcpq.inf ++AddService=usbser, 0x00000002, LowerFilter_Service_Inst ++ ++[DriverInstall.AddReg] ++HKR,,EnumPropPages32,,"msports.dll,SerialPortPropPageProvider" ++ ++;------------------------------------------------------------------------------ ++; 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. ++;------------------------------------------------------------------------------ ++[DeviceList] ++%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_204A ++ ++[DeviceList.NTx86] ++%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_204A ++ ++[DeviceList.NTamd64] ++%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_204A ++ ++[DeviceList.NTia64] ++%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_204A ++ ++;------------------------------------------------------------------------------ ++; String Definitions ++;------------------------------------------------------------------------------ ++;Modify these strings to customize your device ++;------------------------------------------------------------------------------ ++[Strings] ++MFGNAME="http://www.lufa-lib.org" ++DESCRIPTION="LUFA CDC Class Bootloader" diff --cc lib/lufa/Bootloaders/CDC/asf.xml index 000000000,000000000..72f3ff04c new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/CDC/asf.xml @@@ -1,0 -1,0 +1,161 @@@ ++<asf xmlversion="1.0"> ++ <project caption="CDC Bootloader - 128KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.128_4" force-caption="true" workspace-name="lufa_cdc_128kb_4kb_"> ++ <require idref="lufa.bootloaders.cdc"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <config name="config.compiler.optimization.level" value="size"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ ++ <build type="define" name="BOOT_START_ADDR" value="0x1F000"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.text=0x1F000"/> ++ ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FFA0"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FFE0"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FFF8"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/> ++ </project> ++ ++ <project caption="CDC Bootloader - 64KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.64_4" force-caption="true" workspace-name="lufa_cdc_64kb_4kb_"> ++ <require idref="lufa.bootloaders.cdc"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb647"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <config name="config.compiler.optimization.level" value="size"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ ++ <build type="define" name="BOOT_START_ADDR" value="0xF000"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.text=0xF000"/> ++ ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0xFFA0"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0xFFE0"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0xFFF8"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/> ++ </project> ++ ++ <project caption="CDC Bootloader - 32KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.32_4" force-caption="true" workspace-name="lufa_cdc_32kb_4kb_"> ++ <require idref="lufa.bootloaders.cdc"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atmega32u4"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <config name="config.compiler.optimization.level" value="size"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ ++ <build type="define" name="BOOT_START_ADDR" value="0x7000"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/> ++ ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x7FA0"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x7FE0"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x7FF8"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/> ++ </project> ++ ++ <project caption="CDC Bootloader - 16KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.16_4" force-caption="true" workspace-name="lufa_cdc_16kb_4kb_"> ++ <require idref="lufa.bootloaders.cdc"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atmega16u2"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <config name="config.compiler.optimization.level" value="size"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ ++ <build type="define" name="BOOT_START_ADDR" value="0x3000"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.text=0x3000"/> ++ ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x3FA0"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x3FE0"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x3FF8"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/> ++ </project> ++ ++ <project caption="CDC Bootloader - 8KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.8_4" force-caption="true" workspace-name="lufa_cdc_8kb_4kb_"> ++ <require idref="lufa.bootloaders.cdc"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atmega8u2"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <config name="config.compiler.optimization.level" value="size"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ ++ <build type="define" name="BOOT_START_ADDR" value="0x1000"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.text=0x1000"/> ++ ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FA0"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FE0"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FF8"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/> ++ </project> ++ ++ <module type="application" id="lufa.bootloaders.cdc" caption="CDC Bootloader"> ++ <info type="description" value="summary"> ++ CDC Class Bootloader, capable of reprogramming a device using avrdude or other AVR109 protocol compliant software when plugged into a host. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Bootloaders"/> ++ <keyword value="USB Device"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="include-path" value="."/> ++ <build type="c-source" value="BootloaderCDC.c"/> ++ <build type="header-file" value="BootloaderCDC.h"/> ++ <build type="c-source" value="Descriptors.c"/> ++ <build type="header-file" value="Descriptors.h"/> ++ <build type="c-source" value="BootloaderAPI.c"/> ++ <build type="header-file" value="BootloaderAPI.h"/> ++ <build type="asm-source" value="BootloaderAPITable.S"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ <build type="header-file" value="Config/AppConfig.h"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="BootloaderCDC.txt"/> ++ <build type="distribute" subtype="user-file" value="LUFA CDC Bootloader.inf"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ </module> ++</asf> diff --cc lib/lufa/Bootloaders/CDC/doxyfile index 000000000,000000000..414693479 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/CDC/doxyfile @@@ -1,0 -1,0 +1,2396 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - CDC Class Bootloader" ++ ++# The PROJECT_NUMBER tag can be used to enter a project or revision number. This ++# could be handy for archiving the generated documentation or if some version ++# control system is used. ++ ++PROJECT_NUMBER = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM \ ++ ATTR_NO_INIT ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Bootloaders/CDC/makefile index 000000000,000000000..aa5a2117d new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/CDC/makefile @@@ -1,0 -1,0 +1,62 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = BootloaderCDC ++SRC = $(TARGET).c Descriptors.c BootloaderAPI.c BootloaderAPITable.S $(LUFA_SRC_USB) ++LUFA_PATH = ../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ -DBOOT_START_ADDR=$(BOOT_START_OFFSET) ++LD_FLAGS = -Wl,--section-start=.text=$(BOOT_START_OFFSET) $(BOOT_API_LD_FLAGS) ++ ++# Flash size and bootloader section sizes of the target, in KB. These must ++# match the target's total FLASH size and the bootloader size set in the ++# device's fuses. ++FLASH_SIZE_KB = 128 ++BOOT_SECTION_SIZE_KB = 8 ++ ++# Bootloader address calculation formulas ++# Do not modify these macros, but rather modify the dependent values above. ++CALC_ADDRESS_IN_HEX = $(shell printf "0x%X" $$(( $(1) )) ) ++BOOT_START_OFFSET = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024 ) ++BOOT_SEC_OFFSET = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) * 1024) - ($(strip $(1))) ) ++ ++# Bootloader linker section flags for relocating the API table sections to ++# known FLASH addresses - these should not normally be user-edited. ++BOOT_SECTION_LD_FLAG = -Wl,--section-start=$(strip $(1))=$(call BOOT_SEC_OFFSET, $(3)) -Wl,--undefined=$(strip $(2)) ++BOOT_API_LD_FLAGS = $(call BOOT_SECTION_LD_FLAG, .apitable_trampolines, BootloaderAPI_Trampolines, 96) ++BOOT_API_LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .apitable_jumptable, BootloaderAPI_JumpTable, 32) ++BOOT_API_LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .apitable_signatures, BootloaderAPI_Signatures, 8) ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Bootloaders/DFU/BootloaderAPI.c index 000000000,000000000..491c506d0 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/DFU/BootloaderAPI.c @@@ -1,0 -1,0 +1,76 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * Bootloader user application API functions. ++ */ ++ ++#include "BootloaderAPI.h" ++ ++void BootloaderAPI_ErasePage(const uint32_t Address) ++{ ++ boot_page_erase_safe(Address); ++ boot_spm_busy_wait(); ++ boot_rww_enable(); ++} ++ ++void BootloaderAPI_WritePage(const uint32_t Address) ++{ ++ boot_page_write_safe(Address); ++ boot_spm_busy_wait(); ++ boot_rww_enable(); ++} ++ ++void BootloaderAPI_FillWord(const uint32_t Address, const uint16_t Word) ++{ ++ boot_page_fill_safe(Address, Word); ++} ++ ++uint8_t BootloaderAPI_ReadSignature(const uint16_t Address) ++{ ++ return boot_signature_byte_get(Address); ++} ++ ++uint8_t BootloaderAPI_ReadFuse(const uint16_t Address) ++{ ++ return boot_lock_fuse_bits_get(Address); ++} ++ ++uint8_t BootloaderAPI_ReadLock(void) ++{ ++ return boot_lock_fuse_bits_get(GET_LOCK_BITS); ++} ++ ++void BootloaderAPI_WriteLock(const uint8_t LockBits) ++{ ++ boot_lock_bits_set_safe(LockBits); ++} ++ diff --cc lib/lufa/Bootloaders/DFU/BootloaderAPI.h index 000000000,000000000..5169bbc3c new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/DFU/BootloaderAPI.h @@@ -1,0 -1,0 +1,58 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 BootloaderAPI.c. ++ */ ++ ++#ifndef _BOOTLOADER_API_H_ ++#define _BOOTLOADER_API_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/boot.h> ++ #include <stdbool.h> ++ ++ #include <LUFA/Common/Common.h> ++ ++ #include "Config/AppConfig.h" ++ ++ /* Function Prototypes: */ ++ void BootloaderAPI_ErasePage(const uint32_t Address); ++ void BootloaderAPI_WritePage(const uint32_t Address); ++ void BootloaderAPI_FillWord(const uint32_t Address, const uint16_t Word); ++ uint8_t BootloaderAPI_ReadSignature(const uint16_t Address); ++ uint8_t BootloaderAPI_ReadFuse(const uint16_t Address); ++ uint8_t BootloaderAPI_ReadLock(void); ++ void BootloaderAPI_WriteLock(const uint8_t LockBits); ++ ++#endif ++ diff --cc lib/lufa/Bootloaders/DFU/BootloaderAPITable.S index 000000000,000000000..95fd8e5c3 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/DFU/BootloaderAPITable.S @@@ -1,0 -1,0 +1,91 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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. ++*/ ++ ++; Trampolines to actual API implementations if the target address is outside the ++; range of a rjmp instruction (can happen with large bootloader sections) ++.section .apitable_trampolines, "ax" ++.global BootloaderAPI_Trampolines ++BootloaderAPI_Trampolines: ++ ++ BootloaderAPI_ErasePage_Trampoline: ++ jmp BootloaderAPI_ErasePage ++ BootloaderAPI_WritePage_Trampoline: ++ jmp BootloaderAPI_WritePage ++ BootloaderAPI_FillWord_Trampoline: ++ jmp BootloaderAPI_FillWord ++ BootloaderAPI_ReadSignature_Trampoline: ++ jmp BootloaderAPI_ReadSignature ++ BootloaderAPI_ReadFuse_Trampoline: ++ jmp BootloaderAPI_ReadFuse ++ BootloaderAPI_ReadLock_Trampoline: ++ jmp BootloaderAPI_ReadLock ++ BootloaderAPI_WriteLock_Trampoline: ++ jmp BootloaderAPI_WriteLock ++ BootloaderAPI_UNUSED1: ++ ret ++ BootloaderAPI_UNUSED2: ++ ret ++ BootloaderAPI_UNUSED3: ++ ret ++ BootloaderAPI_UNUSED4: ++ ret ++ BootloaderAPI_UNUSED5: ++ ret ++ ++ ++ ++; API function jump table ++.section .apitable_jumptable, "ax" ++.global BootloaderAPI_JumpTable ++BootloaderAPI_JumpTable: ++ ++ rjmp BootloaderAPI_ErasePage_Trampoline ++ rjmp BootloaderAPI_WritePage_Trampoline ++ rjmp BootloaderAPI_FillWord_Trampoline ++ rjmp BootloaderAPI_ReadSignature_Trampoline ++ rjmp BootloaderAPI_ReadFuse_Trampoline ++ rjmp BootloaderAPI_ReadLock_Trampoline ++ rjmp BootloaderAPI_WriteLock_Trampoline ++ rjmp BootloaderAPI_UNUSED1 ; UNUSED ENTRY 1 ++ rjmp BootloaderAPI_UNUSED2 ; UNUSED ENTRY 2 ++ rjmp BootloaderAPI_UNUSED3 ; UNUSED ENTRY 3 ++ rjmp BootloaderAPI_UNUSED4 ; UNUSED ENTRY 4 ++ rjmp BootloaderAPI_UNUSED5 ; UNUSED ENTRY 5 ++ ++ ++ ++; Bootloader table signatures and information ++.section .apitable_signatures, "ax" ++.global BootloaderAPI_Signatures ++BootloaderAPI_Signatures: ++ ++ .long BOOT_START_ADDR ; Start address of the bootloader ++ .word 0xDF10 ; Signature for the DFU class bootloader, V1 ++ .word 0xDCFB ; Signature for a LUFA class bootloader diff --cc lib/lufa/Bootloaders/DFU/BootloaderDFU.c index 000000000,000000000..928cf6fe3 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/DFU/BootloaderDFU.c @@@ -1,0 -1,0 +1,891 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * Main source file for the DFU class bootloader. This file contains the complete bootloader logic. ++ */ ++ ++#define INCLUDE_FROM_BOOTLOADER_C ++#include "BootloaderDFU.h" ++ ++/** Flag to indicate if the bootloader is currently running in secure mode, disallowing memory operations ++ * other than erase. This is initially set to the value set by SECURE_MODE, and cleared by the bootloader ++ * once a memory erase has completed in a bootloader session. ++ */ ++static bool IsSecure = SECURE_MODE; ++ ++/** Flag to indicate if the bootloader should be running, or should exit and allow the application code to run ++ * via a soft reset. When cleared, the bootloader will abort, the USB interface will shut down and the application ++ * jumped to via an indirect jump to location 0x0000 (or other location specified by the host). ++ */ ++static bool RunBootloader = true; ++ ++/** Flag to indicate if the bootloader is waiting to exit. When the host requests the bootloader to exit and ++ * jump to the application address it specifies, it sends two sequential commands which must be properly ++ * acknowledged. Upon reception of the first the RunBootloader flag is cleared and the WaitForExit flag is set, ++ * causing the bootloader to wait for the final exit command before shutting down. ++ */ ++static bool WaitForExit = false; ++ ++/** Current DFU state machine state, one of the values in the DFU_State_t enum. */ ++static uint8_t DFU_State = dfuIDLE; ++ ++/** Status code of the last executed DFU command. This is set to one of the values in the DFU_Status_t enum after ++ * each operation, and returned to the host when a Get Status DFU request is issued. ++ */ ++static uint8_t DFU_Status = OK; ++ ++/** Data containing the DFU command sent from the host. */ ++static DFU_Command_t SentCommand; ++ ++/** Response to the last issued Read Data DFU command. Unlike other DFU commands, the read command ++ * requires a single byte response from the bootloader containing the read data when the next DFU_UPLOAD command ++ * is issued by the host. ++ */ ++static uint8_t ResponseByte; ++ ++/** Pointer to the start of the user application. By default this is 0x0000 (the reset vector), however the host ++ * may specify an alternate address when issuing the application soft-start command. ++ */ ++static AppPtr_t AppStartPtr = (AppPtr_t)0x0000; ++ ++/** 64-bit flash page number. This is concatenated with the current 16-bit address on USB AVRs containing more than ++ * 64KB of flash memory. ++ */ ++static uint8_t Flash64KBPage = 0; ++ ++/** Memory start address, indicating the current address in the memory being addressed (either FLASH or EEPROM ++ * depending on the issued command from the host). ++ */ ++static uint16_t StartAddr = 0x0000; ++ ++/** Memory end address, indicating the end address to read from/write to in the memory being addressed (either FLASH ++ * of EEPROM depending on the issued command from the host). ++ */ ++static uint16_t EndAddr = 0x0000; ++ ++/** Magic lock for forced application start. If the HWBE fuse is programmed and BOOTRST is unprogrammed, the bootloader ++ * will start if the /HWB line of the AVR is held low and the system is reset. However, if the /HWB line is still held ++ * low when the application attempts to start via a watchdog reset, the bootloader will re-start. If set to the value ++ * \ref MAGIC_BOOT_KEY the special init function \ref Application_Jump_Check() will force the application to start. ++ */ ++uint16_t MagicBootKey ATTR_NO_INIT; ++ ++ ++/** Special startup routine to check if the bootloader was started via a watchdog reset, and if the magic application ++ * start key has been loaded into \ref MagicBootKey. If the bootloader started via the watchdog and the key is valid, ++ * this will force the user application to start via a software jump. ++ */ ++void Application_Jump_Check(void) ++{ ++ bool JumpToApplication = false; ++ ++ #if (BOARD == BOARD_LEONARDO) ++ /* Enable pull-up on the IO13 pin so we can use it to select the mode */ ++ PORTC |= (1 << 7); ++ Delay_MS(10); ++ ++ /* If IO13 is not jumpered to ground, start the user application instead */ ++ JumpToApplication = ((PINC & (1 << 7)) != 0); ++ ++ /* Disable pull-up after the check has completed */ ++ PORTC &= ~(1 << 7); ++ #elif ((BOARD == BOARD_XPLAIN) || (BOARD == BOARD_XPLAIN_REV1)) ++ /* Disable JTAG debugging */ ++ JTAG_DISABLE(); ++ ++ /* Enable pull-up on the JTAG TCK pin so we can use it to select the mode */ ++ PORTF |= (1 << 4); ++ Delay_MS(10); ++ ++ /* If the TCK pin is not jumpered to ground, start the user application instead */ ++ JumpToApplication = ((PINF & (1 << 4)) != 0); ++ ++ /* Re-enable JTAG debugging */ ++ JTAG_ENABLE(); ++ #else ++ /* Check if the device's BOOTRST fuse is set */ ++ if (boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS) & FUSE_BOOTRST) ++ { ++ /* If the reset source was not an external reset or the key is correct, clear it and jump to the application */ ++ //if (!(MCUSR & (1 << EXTRF)) || (MagicBootKey == MAGIC_BOOT_KEY)) ++ // JumpToApplication = true; ++ ++ /* Clear reset source */ ++ MCUSR &= ~(1 << EXTRF); ++ } ++ else ++ { ++ /* If the reset source was the bootloader and the key is correct, clear it and jump to the application; ++ * this can happen in the HWBE fuse is set, and the HBE pin is low during the watchdog reset */ ++ //if ((MCUSR & (1 << WDRF)) && (MagicBootKey == MAGIC_BOOT_KEY)) ++ // JumpToApplication = true; ++ ++ /* Clear reset source */ ++ MCUSR &= ~(1 << WDRF); ++ } ++ #endif ++ ++ /* Don't run the user application if the reset vector is blank (no app loaded) */ ++ bool ApplicationValid = (pgm_read_word_near(0) != 0xFFFF); ++ ++ /* If a request has been made to jump to the user application, honor it */ ++ if (JumpToApplication && ApplicationValid) ++ { ++ /* Turn off the watchdog */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Clear the boot key and jump to the user application */ ++ MagicBootKey = 0; ++ ++ // cppcheck-suppress constStatement ++ ((void (*)(void))0x0000)(); ++ } ++} ++ ++/** Main program entry point. This routine configures the hardware required by the bootloader, then continuously ++ * runs the bootloader processing routine until instructed to soft-exit, or hard-reset via the watchdog to start ++ * the loaded application code. ++ */ ++int main(void) ++{ ++ /* Configure hardware required by the bootloader */ ++ SetupHardware(); ++ ++ /* Turn on first LED on the board to indicate that the bootloader has started */ ++ LEDs_SetAllLEDs(LEDS_LED1 | LEDS_LED2); ++ ++ /* Enable global interrupts so that the USB stack can function */ ++ GlobalInterruptEnable(); ++ ++ ++ #if (BOARD == BOARD_QMK) ++ uint16_t keypress = 0; ++ #endif ++ ++ /* Run the USB management task while the bootloader is supposed to be running */ ++ while (RunBootloader || WaitForExit) { ++ USB_USBTask(); ++ #if (BOARD == BOARD_QMK) ++ bool pressed = (PIN(QMK_ESC_ROW) & NUM(QMK_ESC_ROW)); ++ if ((DFU_State == dfuIDLE) && (keypress > 5000) && pressed) { ++ break; ++ } ++ if (pressed) { ++ keypress++; ++ } else { ++ keypress = 0; ++ } ++ ++ #endif ++ } ++ ++ /* Reset configured hardware back to their original states for the user application */ ++ ResetHardware(); ++ ++ /* Start the user application */ ++ AppStartPtr(); ++} ++ ++/** Configures all hardware required for the bootloader. */ ++static void SetupHardware(void) ++{ ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++ ++ /* Relocate the interrupt vector table to the bootloader section */ ++ MCUCR = (1 << IVCE); ++ MCUCR = (1 << IVSEL); ++ ++ #if (BOARD == BOARD_QMK) ++ // column setup ++ DDR(QMK_ESC_COL) |= NUM(QMK_ESC_COL); ++ PORT(QMK_ESC_COL) |= NUM(QMK_ESC_COL); ++ ++ // row setup ++ DDR(QMK_ESC_ROW) |= NUM(QMK_ESC_ROW); ++ #endif ++ ++ /* Initialize the USB and other board hardware drivers */ ++ USB_Init(); ++ LEDs_Init(); ++ ++ /* Bootloader active LED toggle timer initialization */ ++ TIMSK1 = (1 << TOIE1); ++ TCCR1B = ((1 << CS11) | (1 << CS10)); ++ ++} ++ ++/** Resets all configured hardware required for the bootloader back to their original states. */ ++static void ResetHardware(void) ++{ ++ /* Shut down the USB and other board hardware drivers */ ++ USB_Disable(); ++ LEDs_Disable(); ++ ++ /* Disable Bootloader active LED toggle timer */ ++ TIMSK1 = 0; ++ TCCR1B = 0; ++ ++ /* Relocate the interrupt vector table back to the application section */ ++ MCUCR = (1 << IVCE); ++ MCUCR = 0; ++ ++ #if (BOARD == BOARD_QMK) ++ DDR(QMK_ESC_COL) = PORT(QMK_ESC_COL) = DDR(QMK_ESC_ROW) = PORT(QMK_ESC_ROW) = 0; ++ #endif ++} ++ ++/** ISR to periodically toggle the LEDs on the board to indicate that the bootloader is active. */ ++ISR(TIMER1_OVF_vect, ISR_BLOCK) ++{ ++ LEDs_ToggleLEDs(LEDS_LED1 | LEDS_LED2); ++} ++ ++/** Event handler for the USB_ControlRequest event. This is used to catch and process control requests sent to ++ * the device from the USB host before passing along unhandled control requests to the library for processing ++ * internally. ++ */ ++void EVENT_USB_Device_ControlRequest(void) ++{ ++ /* Ignore any requests that aren't directed to the DFU interface */ ++ if ((USB_ControlRequest.bmRequestType & (CONTROL_REQTYPE_TYPE | CONTROL_REQTYPE_RECIPIENT)) != ++ (REQTYPE_CLASS | REQREC_INTERFACE)) ++ { ++ return; ++ } ++ ++ /* Activity - toggle indicator LEDs */ ++ LEDs_ToggleLEDs(LEDS_LED1 | LEDS_LED2); ++ ++ /* Get the size of the command and data from the wLength value */ ++ SentCommand.DataSize = USB_ControlRequest.wLength; ++ ++ switch (USB_ControlRequest.bRequest) ++ { ++ case DFU_REQ_DNLOAD: ++ Endpoint_ClearSETUP(); ++ ++ /* Check if bootloader is waiting to terminate */ ++ if (WaitForExit) ++ { ++ /* Bootloader is terminating - process last received command */ ++ ProcessBootloaderCommand(); ++ ++ /* Indicate that the last command has now been processed - free to exit bootloader */ ++ WaitForExit = false; ++ } ++ ++ /* If the request has a data stage, load it into the command struct */ ++ if (SentCommand.DataSize) ++ { ++ while (!(Endpoint_IsOUTReceived())) ++ { ++ if (USB_DeviceState == DEVICE_STATE_Unattached) ++ return; ++ } ++ ++ /* First byte of the data stage is the DNLOAD request's command */ ++ SentCommand.Command = Endpoint_Read_8(); ++ ++ /* One byte of the data stage is the command, so subtract it from the total data bytes */ ++ SentCommand.DataSize--; ++ ++ /* Load in the rest of the data stage as command parameters */ ++ for (uint8_t DataByte = 0; (DataByte < sizeof(SentCommand.Data)) && ++ Endpoint_BytesInEndpoint(); DataByte++) ++ { ++ SentCommand.Data[DataByte] = Endpoint_Read_8(); ++ SentCommand.DataSize--; ++ } ++ ++ /* Process the command */ ++ ProcessBootloaderCommand(); ++ } ++ ++ /* Check if currently downloading firmware */ ++ if (DFU_State == dfuDNLOAD_IDLE) ++ { ++ if (!(SentCommand.DataSize)) ++ { ++ DFU_State = dfuIDLE; ++ } ++ else ++ { ++ /* Throw away the filler bytes before the start of the firmware */ ++ DiscardFillerBytes(DFU_FILLER_BYTES_SIZE); ++ ++ /* Throw away the packet alignment filler bytes before the start of the firmware */ ++ DiscardFillerBytes(StartAddr % FIXED_CONTROL_ENDPOINT_SIZE); ++ ++ /* Calculate the number of bytes remaining to be written */ ++ uint16_t BytesRemaining = ((EndAddr - StartAddr) + 1); ++ ++ if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x00)) // Write flash ++ { ++ /* Calculate the number of words to be written from the number of bytes to be written */ ++ uint16_t WordsRemaining = (BytesRemaining >> 1); ++ ++ union ++ { ++ uint16_t Words[2]; ++ uint32_t Long; ++ } CurrFlashAddress = {.Words = {StartAddr, Flash64KBPage}}; ++ ++ uint32_t CurrFlashPageStartAddress = CurrFlashAddress.Long; ++ uint8_t WordsInFlashPage = 0; ++ ++ while (WordsRemaining--) ++ { ++ /* Check if endpoint is empty - if so clear it and wait until ready for next packet */ ++ if (!(Endpoint_BytesInEndpoint())) ++ { ++ Endpoint_ClearOUT(); ++ ++ while (!(Endpoint_IsOUTReceived())) ++ { ++ if (USB_DeviceState == DEVICE_STATE_Unattached) ++ return; ++ } ++ } ++ ++ /* Write the next word into the current flash page */ ++ boot_page_fill(CurrFlashAddress.Long, Endpoint_Read_16_LE()); ++ ++ /* Adjust counters */ ++ WordsInFlashPage += 1; ++ CurrFlashAddress.Long += 2; ++ ++ /* See if an entire page has been written to the flash page buffer */ ++ if ((WordsInFlashPage == (SPM_PAGESIZE >> 1)) || !(WordsRemaining)) ++ { ++ /* Commit the flash page to memory */ ++ boot_page_write(CurrFlashPageStartAddress); ++ boot_spm_busy_wait(); ++ ++ /* Check if programming incomplete */ ++ if (WordsRemaining) ++ { ++ CurrFlashPageStartAddress = CurrFlashAddress.Long; ++ WordsInFlashPage = 0; ++ ++ /* Erase next page's temp buffer */ ++ boot_page_erase(CurrFlashAddress.Long); ++ boot_spm_busy_wait(); ++ } ++ } ++ } ++ ++ /* Once programming complete, start address equals the end address */ ++ StartAddr = EndAddr; ++ ++ /* Re-enable the RWW section of flash */ ++ boot_rww_enable(); ++ } ++ else // Write EEPROM ++ { ++ while (BytesRemaining--) ++ { ++ /* Check if endpoint is empty - if so clear it and wait until ready for next packet */ ++ if (!(Endpoint_BytesInEndpoint())) ++ { ++ Endpoint_ClearOUT(); ++ ++ while (!(Endpoint_IsOUTReceived())) ++ { ++ if (USB_DeviceState == DEVICE_STATE_Unattached) ++ return; ++ } ++ } ++ ++ /* Read the byte from the USB interface and write to to the EEPROM */ ++ eeprom_update_byte((uint8_t*)StartAddr, Endpoint_Read_8()); ++ ++ /* Adjust counters */ ++ StartAddr++; ++ } ++ } ++ ++ /* Throw away the currently unused DFU file suffix */ ++ DiscardFillerBytes(DFU_FILE_SUFFIX_SIZE); ++ } ++ } ++ ++ Endpoint_ClearOUT(); ++ ++ Endpoint_ClearStatusStage(); ++ ++ break; ++ case DFU_REQ_UPLOAD: ++ Endpoint_ClearSETUP(); ++ ++ while (!(Endpoint_IsINReady())) ++ { ++ if (USB_DeviceState == DEVICE_STATE_Unattached) ++ return; ++ } ++ ++ if (DFU_State != dfuUPLOAD_IDLE) ++ { ++ if ((DFU_State == dfuERROR) && IS_ONEBYTE_COMMAND(SentCommand.Data, 0x01)) // Blank Check ++ { ++ /* Blank checking is performed in the DFU_DNLOAD request - if we get here we've told the host ++ that the memory isn't blank, and the host is requesting the first non-blank address */ ++ Endpoint_Write_16_LE(StartAddr); ++ } ++ else ++ { ++ /* Idle state upload - send response to last issued command */ ++ Endpoint_Write_8(ResponseByte); ++ } ++ } ++ else ++ { ++ /* Determine the number of bytes remaining in the current block */ ++ uint16_t BytesRemaining = ((EndAddr - StartAddr) + 1); ++ ++ if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x00)) // Read FLASH ++ { ++ /* Calculate the number of words to be written from the number of bytes to be written */ ++ uint16_t WordsRemaining = (BytesRemaining >> 1); ++ ++ union ++ { ++ uint16_t Words[2]; ++ uint32_t Long; ++ } CurrFlashAddress = {.Words = {StartAddr, Flash64KBPage}}; ++ ++ while (WordsRemaining--) ++ { ++ /* Check if endpoint is full - if so clear it and wait until ready for next packet */ ++ if (Endpoint_BytesInEndpoint() == FIXED_CONTROL_ENDPOINT_SIZE) ++ { ++ Endpoint_ClearIN(); ++ ++ while (!(Endpoint_IsINReady())) ++ { ++ if (USB_DeviceState == DEVICE_STATE_Unattached) ++ return; ++ } ++ } ++ ++ /* Read the flash word and send it via USB to the host */ ++ #if (FLASHEND > 0xFFFF) ++ Endpoint_Write_16_LE(pgm_read_word_far(CurrFlashAddress.Long)); ++ #else ++ Endpoint_Write_16_LE(pgm_read_word(CurrFlashAddress.Long)); ++ #endif ++ ++ /* Adjust counters */ ++ CurrFlashAddress.Long += 2; ++ } ++ ++ /* Once reading is complete, start address equals the end address */ ++ StartAddr = EndAddr; ++ } ++ else if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x02)) // Read EEPROM ++ { ++ while (BytesRemaining--) ++ { ++ /* Check if endpoint is full - if so clear it and wait until ready for next packet */ ++ if (Endpoint_BytesInEndpoint() == FIXED_CONTROL_ENDPOINT_SIZE) ++ { ++ Endpoint_ClearIN(); ++ ++ while (!(Endpoint_IsINReady())) ++ { ++ if (USB_DeviceState == DEVICE_STATE_Unattached) ++ return; ++ } ++ } ++ ++ /* Read the EEPROM byte and send it via USB to the host */ ++ Endpoint_Write_8(eeprom_read_byte((uint8_t*)StartAddr)); ++ ++ /* Adjust counters */ ++ StartAddr++; ++ } ++ } ++ ++ /* Return to idle state */ ++ DFU_State = dfuIDLE; ++ } ++ ++ Endpoint_ClearIN(); ++ ++ Endpoint_ClearStatusStage(); ++ break; ++ case DFU_REQ_GETSTATUS: ++ Endpoint_ClearSETUP(); ++ ++ while (!(Endpoint_IsINReady())) ++ { ++ if (USB_DeviceState == DEVICE_STATE_Unattached) ++ return; ++ } ++ ++ /* Write 8-bit status value */ ++ Endpoint_Write_8(DFU_Status); ++ ++ /* Write 24-bit poll timeout value */ ++ Endpoint_Write_8(0); ++ Endpoint_Write_16_LE(0); ++ ++ /* Write 8-bit state value */ ++ Endpoint_Write_8(DFU_State); ++ ++ /* Write 8-bit state string ID number */ ++ Endpoint_Write_8(0); ++ ++ Endpoint_ClearIN(); ++ ++ Endpoint_ClearStatusStage(); ++ break; ++ case DFU_REQ_CLRSTATUS: ++ Endpoint_ClearSETUP(); ++ ++ /* Reset the status value variable to the default OK status */ ++ DFU_Status = OK; ++ ++ Endpoint_ClearStatusStage(); ++ break; ++ case DFU_REQ_GETSTATE: ++ Endpoint_ClearSETUP(); ++ ++ while (!(Endpoint_IsINReady())) ++ { ++ if (USB_DeviceState == DEVICE_STATE_Unattached) ++ return; ++ } ++ ++ /* Write the current device state to the endpoint */ ++ Endpoint_Write_8(DFU_State); ++ ++ Endpoint_ClearIN(); ++ ++ Endpoint_ClearStatusStage(); ++ break; ++ case DFU_REQ_ABORT: ++ Endpoint_ClearSETUP(); ++ ++ /* Reset the current state variable to the default idle state */ ++ DFU_State = dfuIDLE; ++ ++ Endpoint_ClearStatusStage(); ++ break; ++ } ++} ++ ++/** Routine to discard the specified number of bytes from the control endpoint stream. This is used to ++ * discard unused bytes in the stream from the host, including the memory program block suffix. ++ * ++ * \param[in] NumberOfBytes Number of bytes to discard from the host from the control endpoint ++ */ ++static void DiscardFillerBytes(uint8_t NumberOfBytes) ++{ ++ while (NumberOfBytes--) ++ { ++ if (!(Endpoint_BytesInEndpoint())) ++ { ++ Endpoint_ClearOUT(); ++ ++ /* Wait until next data packet received */ ++ while (!(Endpoint_IsOUTReceived())) ++ { ++ if (USB_DeviceState == DEVICE_STATE_Unattached) ++ return; ++ } ++ } ++ else ++ { ++ Endpoint_Discard_8(); ++ } ++ } ++} ++ ++/** Routine to process an issued command from the host, via a DFU_DNLOAD request wrapper. This routine ensures ++ * that the command is allowed based on the current secure mode flag value, and passes the command off to the ++ * appropriate handler function. ++ */ ++static void ProcessBootloaderCommand(void) ++{ ++ /* Check if device is in secure mode */ ++ if (IsSecure) ++ { ++ /* Don't process command unless it is a READ or chip erase command */ ++ if (!(((SentCommand.Command == COMMAND_WRITE) && ++ IS_TWOBYTE_COMMAND(SentCommand.Data, 0x00, 0xFF)) || ++ (SentCommand.Command == COMMAND_READ))) ++ { ++ /* Set the state and status variables to indicate the error */ ++ DFU_State = dfuERROR; ++ DFU_Status = errWRITE; ++ ++ /* Stall command */ ++ Endpoint_StallTransaction(); ++ ++ /* Don't process the command */ ++ return; ++ } ++ } ++ ++ /* Dispatch the required command processing routine based on the command type */ ++ switch (SentCommand.Command) ++ { ++ case COMMAND_PROG_START: ++ ProcessMemProgCommand(); ++ break; ++ case COMMAND_DISP_DATA: ++ ProcessMemReadCommand(); ++ break; ++ case COMMAND_WRITE: ++ ProcessWriteCommand(); ++ break; ++ case COMMAND_READ: ++ ProcessReadCommand(); ++ break; ++ case COMMAND_CHANGE_BASE_ADDR: ++ if (IS_TWOBYTE_COMMAND(SentCommand.Data, 0x03, 0x00)) // Set 64KB flash page command ++ Flash64KBPage = SentCommand.Data[2]; ++ ++ break; ++ } ++} ++ ++/** Routine to concatenate the given pair of 16-bit memory start and end addresses from the host, and store them ++ * in the StartAddr and EndAddr global variables. ++ */ ++static void LoadStartEndAddresses(void) ++{ ++ union ++ { ++ uint8_t Bytes[2]; ++ uint16_t Word; ++ } Address[2] = {{.Bytes = {SentCommand.Data[2], SentCommand.Data[1]}}, ++ {.Bytes = {SentCommand.Data[4], SentCommand.Data[3]}}}; ++ ++ /* Load in the start and ending read addresses from the sent data packet */ ++ StartAddr = Address[0].Word; ++ EndAddr = Address[1].Word; ++} ++ ++/** Handler for a Memory Program command issued by the host. This routine handles the preparations needed ++ * to write subsequent data from the host into the specified memory. ++ */ ++static void ProcessMemProgCommand(void) ++{ ++ if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x00) || // Write FLASH command ++ IS_ONEBYTE_COMMAND(SentCommand.Data, 0x01)) // Write EEPROM command ++ { ++ /* Load in the start and ending read addresses */ ++ LoadStartEndAddresses(); ++ ++ /* If FLASH is being written to, we need to pre-erase the first page to write to */ ++ if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x00)) ++ { ++ union ++ { ++ uint16_t Words[2]; ++ uint32_t Long; ++ } CurrFlashAddress = {.Words = {StartAddr, Flash64KBPage}}; ++ ++ /* Erase the current page's temp buffer */ ++ boot_page_erase(CurrFlashAddress.Long); ++ boot_spm_busy_wait(); ++ } ++ ++ /* Set the state so that the next DNLOAD requests reads in the firmware */ ++ DFU_State = dfuDNLOAD_IDLE; ++ } ++} ++ ++/** Handler for a Memory Read command issued by the host. This routine handles the preparations needed ++ * to read subsequent data from the specified memory out to the host, as well as implementing the memory ++ * blank check command. ++ */ ++static void ProcessMemReadCommand(void) ++{ ++ if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x00) || // Read FLASH command ++ IS_ONEBYTE_COMMAND(SentCommand.Data, 0x02)) // Read EEPROM command ++ { ++ /* Load in the start and ending read addresses */ ++ LoadStartEndAddresses(); ++ ++ /* Set the state so that the next UPLOAD requests read out the firmware */ ++ DFU_State = dfuUPLOAD_IDLE; ++ } ++ else if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x01)) // Blank check FLASH command ++ { ++ uint32_t CurrFlashAddress = 0; ++ ++ while (CurrFlashAddress < (uint32_t)BOOT_START_ADDR) ++ { ++ /* Check if the current byte is not blank */ ++ #if (FLASHEND > 0xFFFF) ++ if (pgm_read_byte_far(CurrFlashAddress) != 0xFF) ++ #else ++ if (pgm_read_byte(CurrFlashAddress) != 0xFF) ++ #endif ++ { ++ /* Save the location of the first non-blank byte for response back to the host */ ++ Flash64KBPage = (CurrFlashAddress >> 16); ++ StartAddr = CurrFlashAddress; ++ ++ /* Set state and status variables to the appropriate error values */ ++ DFU_State = dfuERROR; ++ DFU_Status = errCHECK_ERASED; ++ ++ break; ++ } ++ ++ CurrFlashAddress++; ++ } ++ } ++} ++ ++/** Handler for a Data Write command issued by the host. This routine handles non-programming commands such as ++ * bootloader exit (both via software jumps and hardware watchdog resets) and flash memory erasure. ++ */ ++static void ProcessWriteCommand(void) ++{ ++ if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x03)) // Start application ++ { ++ /* Indicate that the bootloader is terminating */ ++ WaitForExit = true; ++ ++ /* Check if data supplied for the Start Program command - no data executes the program */ ++ if (SentCommand.DataSize) ++ { ++ if (SentCommand.Data[1] == 0x01) // Start via jump ++ { ++ union ++ { ++ uint8_t Bytes[2]; ++ AppPtr_t FuncPtr; ++ } Address = {.Bytes = {SentCommand.Data[4], SentCommand.Data[3]}}; ++ ++ /* Load in the jump address into the application start address pointer */ ++ AppStartPtr = Address.FuncPtr; ++ } ++ } ++ else ++ { ++ if (SentCommand.Data[1] == 0x00) // Start via watchdog ++ { ++ /* Unlock the forced application start mode of the bootloader if it is restarted */ ++ MagicBootKey = MAGIC_BOOT_KEY; ++ ++ /* Start the watchdog to reset the AVR once the communications are finalized */ ++ wdt_enable(WDTO_250MS); ++ } ++ else // Start via jump ++ { ++ /* Set the flag to terminate the bootloader at next opportunity if a valid application has been loaded */ ++ if (pgm_read_word_near(0) == 0xFFFF) ++ RunBootloader = false; ++ } ++ } ++ } ++ else if (IS_TWOBYTE_COMMAND(SentCommand.Data, 0x00, 0xFF)) // Erase flash ++ { ++ uint32_t CurrFlashAddress = 0; ++ ++ /* Clear the application section of flash */ ++ while (CurrFlashAddress < (uint32_t)BOOT_START_ADDR) ++ { ++ boot_page_erase(CurrFlashAddress); ++ boot_spm_busy_wait(); ++ boot_page_write(CurrFlashAddress); ++ boot_spm_busy_wait(); ++ ++ CurrFlashAddress += SPM_PAGESIZE; ++ } ++ ++ /* Re-enable the RWW section of flash as writing to the flash locks it out */ ++ boot_rww_enable(); ++ ++ /* Memory has been erased, reset the security bit so that programming/reading is allowed */ ++ IsSecure = false; ++ } ++} ++ ++/** Handler for a Data Read command issued by the host. This routine handles bootloader information retrieval ++ * commands such as device signature and bootloader version retrieval. ++ */ ++static void ProcessReadCommand(void) ++{ ++ const uint8_t BootloaderInfo[3] = {BOOTLOADER_VERSION, BOOTLOADER_ID_BYTE1, BOOTLOADER_ID_BYTE2}; ++ const uint8_t SignatureInfo[4] = {0x58, AVR_SIGNATURE_1, AVR_SIGNATURE_2, AVR_SIGNATURE_3}; ++ ++ uint8_t DataIndexToRead = SentCommand.Data[1]; ++ bool ReadAddressInvalid = false; ++ ++ if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x00)) // Read bootloader info ++ { ++ if (DataIndexToRead < 3) ++ ResponseByte = BootloaderInfo[DataIndexToRead]; ++ else ++ ReadAddressInvalid = true; ++ } ++ else if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x01)) // Read signature byte ++ { ++ switch (DataIndexToRead) ++ { ++ case 0x30: ++ ResponseByte = SignatureInfo[0]; ++ break; ++ case 0x31: ++ ResponseByte = SignatureInfo[1]; ++ break; ++ case 0x60: ++ ResponseByte = SignatureInfo[2]; ++ break; ++ case 0x61: ++ ResponseByte = SignatureInfo[3]; ++ break; ++ default: ++ ReadAddressInvalid = true; ++ break; ++ } ++ } ++ ++ if (ReadAddressInvalid) ++ { ++ /* Set the state and status variables to indicate the error */ ++ DFU_State = dfuERROR; ++ DFU_Status = errADDRESS; ++ } ++} diff --cc lib/lufa/Bootloaders/DFU/BootloaderDFU.h index 000000000,000000000..a97ba6c7e new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/DFU/BootloaderDFU.h @@@ -1,0 -1,0 +1,216 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * Header file for BootloaderDFU.c. ++ */ ++ ++#ifndef _BOOTLOADER_H_ ++#define _BOOTLOADER_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/boot.h> ++ #include <avr/pgmspace.h> ++ #include <avr/eeprom.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <util/delay.h> ++ #include <stdbool.h> ++ ++ #include "Descriptors.h" ++ #include "BootloaderAPI.h" ++ #include "Config/AppConfig.h" ++ ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Platform/Platform.h> ++ ++ /* Preprocessor Checks: */ ++ #if !defined(__OPTIMIZE_SIZE__) ++ #error This bootloader requires that it be optimized for size, not speed, to fit into the target device. Change optimization settings and try again. ++ #endif ++ ++ /* Macros: */ ++ /** Major bootloader version number. */ ++ #define BOOTLOADER_VERSION_MINOR 2 ++ ++ /** Minor bootloader version number. */ ++ #define BOOTLOADER_VERSION_REV 0 ++ ++ /** Magic bootloader key to unlock forced application start mode. */ ++ #define MAGIC_BOOT_KEY 0xDC42 ++ ++ /** Complete bootloader version number expressed as a packed byte, constructed from the ++ * two individual bootloader version macros. ++ */ ++ #define BOOTLOADER_VERSION ((BOOTLOADER_VERSION_MINOR << 4) | BOOTLOADER_VERSION_REV) ++ ++ /** First byte of the bootloader identification bytes, used to identify a device's bootloader. */ ++ #define BOOTLOADER_ID_BYTE1 0xDC ++ ++ /** Second byte of the bootloader identification bytes, used to identify a device's bootloader. */ ++ #define BOOTLOADER_ID_BYTE2 0xFB ++ ++ /** Convenience macro, used to determine if the issued command is the given one-byte long command. ++ * ++ * \param[in] dataarr Command byte array to check against ++ * \param[in] cb1 First command byte to check ++ */ ++ #define IS_ONEBYTE_COMMAND(dataarr, cb1) (dataarr[0] == (cb1)) ++ ++ /** Convenience macro, used to determine if the issued command is the given two-byte long command. ++ * ++ * \param[in] dataarr Command byte array to check against ++ * \param[in] cb1 First command byte to check ++ * \param[in] cb2 Second command byte to check ++ */ ++ #define IS_TWOBYTE_COMMAND(dataarr, cb1, cb2) ((dataarr[0] == (cb1)) && (dataarr[1] == (cb2))) ++ ++ /** Length of the DFU file suffix block, appended to the end of each complete memory write command. ++ * The DFU file suffix is currently unused (but is designed to give extra file information, such as ++ * a CRC of the complete firmware for error checking) and so is discarded. ++ */ ++ #define DFU_FILE_SUFFIX_SIZE 16 ++ ++ /** Length of the DFU file filler block, appended to the start of each complete memory write command. ++ * Filler bytes are added to the start of each complete memory write command, and must be discarded. ++ */ ++ #define DFU_FILLER_BYTES_SIZE 26 ++ ++ /** DFU class command request to detach from the host. */ ++ #define DFU_REQ_DETATCH 0x00 ++ ++ /** DFU class command request to send data from the host to the bootloader. */ ++ #define DFU_REQ_DNLOAD 0x01 ++ ++ /** DFU class command request to send data from the bootloader to the host. */ ++ #define DFU_REQ_UPLOAD 0x02 ++ ++ /** DFU class command request to get the current DFU status and state from the bootloader. */ ++ #define DFU_REQ_GETSTATUS 0x03 ++ ++ /** DFU class command request to reset the current DFU status and state variables to their defaults. */ ++ #define DFU_REQ_CLRSTATUS 0x04 ++ ++ /** DFU class command request to get the current DFU state of the bootloader. */ ++ #define DFU_REQ_GETSTATE 0x05 ++ ++ /** DFU class command request to abort the current multi-request transfer and return to the dfuIDLE state. */ ++ #define DFU_REQ_ABORT 0x06 ++ ++ /** DFU command to begin programming the device's memory. */ ++ #define COMMAND_PROG_START 0x01 ++ ++ /** DFU command to begin reading the device's memory. */ ++ #define COMMAND_DISP_DATA 0x03 ++ ++ /** DFU command to issue a write command. */ ++ #define COMMAND_WRITE 0x04 ++ ++ /** DFU command to issue a read command. */ ++ #define COMMAND_READ 0x05 ++ ++ /** DFU command to issue a memory base address change command, to set the current 64KB flash page ++ * that subsequent flash operations should use. */ ++ #define COMMAND_CHANGE_BASE_ADDR 0x06 ++ ++ /* Type Defines: */ ++ /** Type define for a non-returning function pointer to the loaded application. */ ++ typedef void (*AppPtr_t)(void) ATTR_NO_RETURN; ++ ++ /** Type define for a structure containing a complete DFU command issued by the host. */ ++ typedef struct ++ { ++ uint8_t Command; /**< Single byte command to perform, one of the \c COMMAND_* macro values */ ++ uint8_t Data[5]; /**< Command parameters */ ++ uint16_t DataSize; /**< Size of the command parameters */ ++ } DFU_Command_t; ++ ++ /* Enums: */ ++ /** DFU bootloader states. Refer to the DFU class specification for information on each state. */ ++ enum DFU_State_t ++ { ++ appIDLE = 0, ++ appDETACH = 1, ++ dfuIDLE = 2, ++ dfuDNLOAD_SYNC = 3, ++ dfuDNBUSY = 4, ++ dfuDNLOAD_IDLE = 5, ++ dfuMANIFEST_SYNC = 6, ++ dfuMANIFEST = 7, ++ dfuMANIFEST_WAIT_RESET = 8, ++ dfuUPLOAD_IDLE = 9, ++ dfuERROR = 10 ++ }; ++ ++ /** DFU command status error codes. Refer to the DFU class specification for information on each error code. */ ++ enum DFU_Status_t ++ { ++ OK = 0, ++ errTARGET = 1, ++ errFILE = 2, ++ errWRITE = 3, ++ errERASE = 4, ++ errCHECK_ERASED = 5, ++ errPROG = 6, ++ errVERIFY = 7, ++ errADDRESS = 8, ++ errNOTDONE = 9, ++ errFIRMWARE = 10, ++ errVENDOR = 11, ++ errUSBR = 12, ++ errPOR = 13, ++ errUNKNOWN = 14, ++ errSTALLEDPKT = 15 ++ }; ++ ++ /* Function Prototypes: */ ++ static void SetupHardware(void); ++ static void ResetHardware(void); ++ ++ void EVENT_USB_Device_ControlRequest(void); ++ ++ #if defined(INCLUDE_FROM_BOOTLOADER_C) ++ static void DiscardFillerBytes(uint8_t NumberOfBytes); ++ static void ProcessBootloaderCommand(void); ++ static void LoadStartEndAddresses(void); ++ static void ProcessMemProgCommand(void); ++ static void ProcessMemReadCommand(void); ++ static void ProcessWriteCommand(void); ++ static void ProcessReadCommand(void); ++ #endif ++ ++ void Application_Jump_Check(void) ATTR_INIT_SECTION(3); ++ ++#endif ++ diff --cc lib/lufa/Bootloaders/DFU/BootloaderDFU.txt index 000000000,000000000..b2540a5b6 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/DFU/BootloaderDFU.txt @@@ -1,0 -1,0 +1,235 @@@ ++/** \file ++ * ++ * This file contains special DoxyGen information for the generation of the main page and other special ++ * documentation pages. It is not a project source file. ++ */ ++ ++/** \mainpage DFU Class USB AVR Bootloader ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * \li Series 6 USB AVRs (AT90USBxxx6) ++ * \li Series 4 USB AVRs (ATMEGAxxU4) - <i>See \ref SSec_Aux_Space</i> ++ * \li Series 2 USB AVRs (AT90USBxx2, ATMEGAxxU2) - <i>See \ref SSec_Aux_Space</i> ++ * ++ * \section Sec_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>Device Firmware Update Class (DFU)</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>None</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF DFU Class Standard, Atmel USB Bootloader Datasheet</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Low Speed Mode \n ++ * Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * This bootloader enumerates to the host as a DFU Class device, allowing for DFU-compatible programming ++ * software to load firmware onto the AVR. ++ * ++ * Out of the box this bootloader builds for the AT90USB1287 with an 8KB bootloader section size, and will fit ++ * into 4KB of bootloader space. If you wish to alter this size and/or change the AVR model, you will need to ++ * edit the MCU, FLASH_SIZE_KB and BOOT_SECTION_SIZE_KB values in the accompanying makefile. ++ * ++ * When the bootloader is running, the board's LED(s) will flash at regular intervals to distinguish the ++ * bootloader from the normal user application. ++ * ++ * \section Sec_Running Running the Bootloader ++ * ++ * On the USB AVR8 devices, setting the \c HWBE device fuse will cause the bootloader to run if the \c HWB pin of ++ * the AVR is grounded when the device is reset. ++ * ++ * The are two behaviours of this bootloader, depending on the device's fuses: ++ * ++ * <b>If the device's BOOTRST fuse is set</b>, the bootloader will run any time the system is reset from ++ * the external reset pin, unless no valid user application has been loaded. To initiate the bootloader, the ++ * device's external reset pin should be grounded momentarily. ++ * ++ * <b>If the device's BOOTRST fuse is not set</b>, the bootloader will run only if initiated via a software ++ * jump, or if the \c HWB pin was low during the last device reset (if the \c HWBE fuse is set). ++ * ++ * For board specific exceptions to the above, see below. ++ * ++ * \subsection SSec_XPLAIN Atmel Xplain Board ++ * Ground the USB AVR JTAG's \c TCK pin to ground when powering on the board to start the bootloader. This assumes the ++ * \c HWBE fuse is cleared and the \c BOOTRST fuse is set as the HWBE pin is not user accessible on this board. ++ * ++ * \subsection SSec_Leonardo Arduino Leonardo Board ++ * Ground \c IO13 when powering the board to start the bootloader. This assumes the \c HWBE fuse is cleared and the ++ * \c BOOTRST fuse is set as the HWBE pin is not user accessible on this board. ++ * ++ * \section Sec_Installation Driver Installation ++ * ++ * This bootloader is designed to be compatible with Atmel's provided Windows DFU class drivers. You will need to ++ * install Atmel's DFU drivers prior to using this bootloader on Windows platforms. If you are using a 64 bit Windows ++ * OS, you will need to either disable the driver signing requirement (see online tutorials for details) or use a ++ * digitally signed version of the official Atmel driver provided by a third party AVR user at ++ * <a>http://www.avrfreaks.net/index.php?module=Freaks%20Academy&func=viewItem&item_id=2196&item_type=project</a>. ++ * ++ * \note This device spoofs Atmel's DFU Bootloader USB VID and PID so that the Atmel DFU bootloader ++ * drivers included with FLIP will work. If you do not wish to use Atmel's ID codes, please ++ * manually change them in Descriptors.c and alter your driver's INF file accordingly. ++ * ++ * \section Sec_HostApp Host Controller Application ++ * ++ * This bootloader is compatible with Atmel's FLIP utility on Windows machines, and dfu-programmer on Linux machines. ++ * ++ * \subsection SSec_FLIP FLIP (Windows) ++ * ++ * FLIP (Flexible In-System Programmer) is a utility written by Atmel, and distributed for free on the Atmel website. ++ * The FLIP utility is designed to assist in the bootloader programming of a range of Atmel devices, through several ++ * popular physical interfaces including USB. It is written in Java, however makes use of native extensions for USB ++ * support and thus is only offered on Windows. ++ * ++ * To program a device using FLIP, refer to the Atmel FLIP documentation. ++ * ++ * \subsection SSec_DFUProgrammer dfu-programmer (Linux) ++ * ++ * dfu-programmer is an open-source command line solution for the bootloader programming of Atmel devices through a ++ * USB connection, using the DFU protocol, available for download at <a>http://sourceforge.net/projects/dfu-programmer/</a>. ++ * ++ * The following example loads a HEX file into the AVR's FLASH memory using dfu-programmer: ++ * \code ++ * dfu-programmer at90usb1287 erase flash Mouse.hex ++ * \endcode ++ * ++ * \section Sec_API User Application API ++ * ++ * Several user application functions for FLASH and other special memory area manipulations are exposed by the bootloader, ++ * allowing the user application to call into the bootloader at runtime to read and write FLASH data. ++ * ++ * \warning The APIs exposed by the DFU class bootloader are \b NOT compatible with the API exposed by the official Atmel DFU bootloader. ++ * ++ * By default, the bootloader API jump table is located 32 bytes from the end of the device's FLASH memory, and follows the ++ * following layout: ++ * ++ * \code ++ * #define BOOTLOADER_API_TABLE_SIZE 32 ++ * #define BOOTLOADER_API_TABLE_START ((FLASHEND + 1UL) - BOOTLOADER_API_TABLE_SIZE) ++ * #define BOOTLOADER_API_CALL(Index) (void*)((BOOTLOADER_API_TABLE_START + (Index * 2)) / 2) ++ * ++ * void (*BootloaderAPI_ErasePage)(uint32_t Address) = BOOTLOADER_API_CALL(0); ++ * void (*BootloaderAPI_WritePage)(uint32_t Address) = BOOTLOADER_API_CALL(1); ++ * void (*BootloaderAPI_FillWord)(uint32_t Address, uint16_t Word) = BOOTLOADER_API_CALL(2); ++ * uint8_t (*BootloaderAPI_ReadSignature)(uint16_t Address) = BOOTLOADER_API_CALL(3); ++ * uint8_t (*BootloaderAPI_ReadFuse)(uint16_t Address) = BOOTLOADER_API_CALL(4); ++ * uint8_t (*BootloaderAPI_ReadLock)(void) = BOOTLOADER_API_CALL(5); ++ * void (*BootloaderAPI_WriteLock)(uint8_t LockBits) = BOOTLOADER_API_CALL(6); ++ * ++ * #define BOOTLOADER_MAGIC_SIGNATURE_START (BOOTLOADER_API_TABLE_START + (BOOTLOADER_API_TABLE_SIZE - 2)) ++ * #define BOOTLOADER_MAGIC_SIGNATURE 0xDCFB ++ * ++ * #define BOOTLOADER_CLASS_SIGNATURE_START (BOOTLOADER_API_TABLE_START + (BOOTLOADER_API_TABLE_SIZE - 4)) ++ * #define BOOTLOADER_DFU_SIGNATURE 0xDF10 ++ * ++ * #define BOOTLOADER_ADDRESS_START (BOOTLOADER_API_TABLE_START + (BOOTLOADER_API_TABLE_SIZE - 8)) ++ * #define BOOTLOADER_ADDRESS_LENGTH 4 ++ * \endcode ++ * ++ * From the application the API support of the bootloader can be detected by reading the FLASH memory bytes located at address ++ * \c BOOTLOADER_MAGIC_SIGNATURE_START and comparing them to the value \c BOOTLOADER_MAGIC_SIGNATURE. The class of bootloader ++ * can be determined by reading the FLASH memory bytes located at address \c BOOTLOADER_CLASS_SIGNATURE_START and comparing them ++ * to the value \c BOOTLOADER_DFU_SIGNATURE. The start address of the bootloader can be retrieved by reading the bytes of FLASH ++ * memory starting from address \c BOOTLOADER_ADDRESS_START. ++ * ++ * \subsection SSec_API_MemLayout Device Memory Map ++ * The following illustration indicates the final memory map of the device when loaded with the bootloader. ++ * ++ * \verbatim ++ * +----------------------------+ 0x0000 ++ * | | ++ * | | ++ * | | ++ * | | ++ * | | ++ * | | ++ * | | ++ * | | ++ * | User Application | ++ * | | ++ * | | ++ * | | ++ * | | ++ * | | ++ * | | ++ * | | ++ * | | ++ * +----------------------------+ FLASHEND - BOOT_AUX_SECTION_SIZE ++ * | Booloader Start Trampoline | ++ * | (Not User App. Accessible) | ++ * +----------------------------+ FLASHEND - (BOOT_AUX_SECTION_SIZE - 4) ++ * | | ++ * | Auxillery Bootloader | ++ * | Space for Smaller Devices | ++ * | (Not User App. Accessible) | ++ * | | ++ * +----------------------------+ FLASHEND - BOOT_SECTION_SIZE ++ * | | ++ * | Bootloader Application | ++ * | (Not User App. Accessible) | ++ * | | ++ * +----------------------------+ FLASHEND - 96 ++ * | API Table Trampolines | ++ * | (Not User App. Accessible) | ++ * +----------------------------+ FLASHEND - 32 ++ * | Bootloader API Table | ++ * | (User App. Accessible) | ++ * +----------------------------+ FLASHEND - 8 ++ * | Bootloader ID Constants | ++ * | (User App. Accessible) | ++ * +----------------------------+ FLASHEND ++ * \endverbatim ++ * ++ * \subsection SSec_Aux_Space Auxiliary Bootloader Section ++ * To make the bootloader function on smaller devices (those with a physical ++ * bootloader section of smaller than 6KB) ++ * ++ * \section Sec_KnownIssues Known Issues: ++ * ++ * \par On Linux machines, the DFU bootloader is inaccessible. ++ * On many Linux systems, non-root users do not have automatic access to newly ++ * inserted DFU devices. Root privileges or a UDEV rule is required to gain ++ * access. ++ * See <a href=https://groups.google.com/d/msg/lufa-support/CP9cy2bc8yo/kBqsOu-RBeMJ>here</a> for resolution steps. ++ * ++ * \section Sec_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> ++ * <th><b>Define Name:</b></th> ++ * <th><b>Location:</b></th> ++ * <th><b>Description:</b></th> ++ * </tr> ++ * <tr> ++ * <td>SECURE_MODE</td> ++ * <td>AppConfig.h</td> ++ * <td>If defined to \c true, the bootloader will not accept any memory commands other than a chip erase on start-up, until an ++ * erase has been performed. This can be used in conjunction with the AVR's lockbits to prevent the AVRs firmware from ++ * being dumped by unauthorized persons. When false, all memory operations are allowed at any time.</td> ++ * </tr> ++ * </table> ++ */ ++ diff --cc lib/lufa/Bootloaders/DFU/Config/AppConfig.h index 000000000,000000000..3acf33c7e new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/DFU/Config/AppConfig.h @@@ -1,0 -1,0 +1,48 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief Application Configuration Header File ++ * ++ * This is a header file which is be used to configure some of ++ * the application's compile time options, as an alternative to ++ * specifying the compile time constants supplied through a ++ * makefile or build system. ++ * ++ * For information on what each token does, refer to the ++ * \ref Sec_Options section of the application documentation. ++ */ ++ ++#ifndef _APP_CONFIG_H_ ++#define _APP_CONFIG_H_ ++ ++ #define SECURE_MODE false ++ ++#endif diff --cc lib/lufa/Bootloaders/DFU/Config/LUFAConfig.h index 000000000,000000000..59ae519e4 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/DFU/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++ #define USB_DEVICE_ONLY ++// #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++ #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++ #define USE_RAM_DESCRIPTORS ++// #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++ #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 32 ++ #define DEVICE_STATE_AS_GPIOR 0 ++ #define FIXED_NUM_CONFIGURATIONS 1 ++ #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++ #define NO_DEVICE_REMOTE_WAKEUP ++ #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Bootloaders/DFU/Descriptors.c index 000000000,000000000..6b7b6d490 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/DFU/Descriptors.c @@@ -1,0 -1,0 +1,185 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special ++ * computer-readable structures which the host requests upon device enumeration, to determine ++ * the device's capabilities and functions. ++ */ ++ ++#include "Descriptors.h" ++ ++/** Device descriptor structure. This descriptor, located in SRAM memory, describes the overall ++ * device characteristics, including the supported USB version, control endpoint size and the ++ * number of device configurations. The descriptor is read out by the USB host when the enumeration ++ * process begins. ++ */ ++const USB_Descriptor_Device_t DeviceDescriptor = ++{ ++ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, ++ ++ .USBSpecification = VERSION_BCD(1,1,0), ++ .Class = USB_CSCP_NoDeviceClass, ++ .SubClass = USB_CSCP_NoDeviceSubclass, ++ .Protocol = USB_CSCP_NoDeviceProtocol, ++ ++ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, ++ ++ .VendorID = 0x03EB, ++ .ProductID = PRODUCT_ID_CODE, ++ .ReleaseNumber = VERSION_BCD(0,0,0), ++ ++ .ManufacturerStrIndex = STRING_ID_Manufacturer, ++ .ProductStrIndex = STRING_ID_Product, ++ .SerialNumStrIndex = NO_DESCRIPTOR, ++ ++ .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS ++}; ++ ++/** Configuration descriptor structure. This descriptor, located in SRAM memory, describes the usage ++ * of the device in one of its supported configurations, including information about any device interfaces ++ * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting ++ * a configuration so that the host may correctly communicate with the USB device. ++ */ ++const USB_Descriptor_Configuration_t ConfigurationDescriptor = ++{ ++ .Config = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration}, ++ ++ .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t), ++ .TotalInterfaces = 1, ++ ++ .ConfigurationNumber = 1, ++ .ConfigurationStrIndex = NO_DESCRIPTOR, ++ ++ .ConfigAttributes = USB_CONFIG_ATTR_RESERVED, ++ ++ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) ++ }, ++ ++ .DFU_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_DFU, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 0, ++ ++ .Class = 0xFE, ++ .SubClass = 0x01, ++ .Protocol = 0x02, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .DFU_Functional = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_DFU_Functional_t), .Type = DTYPE_DFUFunctional}, ++ ++ .Attributes = (ATTR_CAN_UPLOAD | ATTR_CAN_DOWNLOAD), ++ ++ .DetachTimeout = 0x0000, ++ .TransferSize = 0x0C00, ++ ++ .DFUSpecification = VERSION_BCD(1,1,0) ++ } ++}; ++ ++/** Language descriptor structure. This descriptor, located in SRAM memory, is returned when the host requests ++ * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate ++ * via the language ID table available at USB.org what languages the device supports for its string descriptors. ++ */ ++const USB_Descriptor_String_t LanguageString = USB_STRING_DESCRIPTOR_ARRAY(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. ++ */ ++const USB_Descriptor_String_t ManufacturerString = USB_STRING_DESCRIPTOR(L"QMK"); ++ ++/** 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. ++ */ ++const USB_Descriptor_String_t ProductString = USB_STRING_DESCRIPTOR(L"KB"); ++ ++/** 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 uint16_t wIndex, ++ const void** const DescriptorAddress) ++{ ++ const uint8_t DescriptorType = (wValue >> 8); ++ const uint8_t DescriptorNumber = (wValue & 0xFF); ++ ++ const void* Address = NULL; ++ uint16_t Size = NO_DESCRIPTOR; ++ ++ switch (DescriptorType) ++ { ++ case DTYPE_Device: ++ Address = &DeviceDescriptor; ++ Size = sizeof(USB_Descriptor_Device_t); ++ break; ++ case DTYPE_Configuration: ++ Address = &ConfigurationDescriptor; ++ Size = sizeof(USB_Descriptor_Configuration_t); ++ break; ++ case DTYPE_String: ++ if (DescriptorNumber == STRING_ID_Language) ++ { ++ Address = &LanguageString; ++ Size = LanguageString.Header.Size; ++ } ++ else if (DescriptorNumber == STRING_ID_Manufacturer) ++ { ++ Address = &ManufacturerString; ++ Size = ManufacturerString.Header.Size; ++ } ++ else if (DescriptorNumber == STRING_ID_Product) ++ { ++ Address = &ProductString; ++ Size = ProductString.Header.Size; ++ } ++ ++ break; ++ } ++ ++ *DescriptorAddress = Address; ++ return Size; ++} ++ diff --cc lib/lufa/Bootloaders/DFU/Descriptors.h index 000000000,000000000..5487f88f3 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/DFU/Descriptors.h @@@ -1,0 -1,0 +1,194 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * Header file for Descriptors.c. ++ */ ++ ++#ifndef _DESCRIPTORS_H_ ++#define _DESCRIPTORS_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include "Config/AppConfig.h" ++ ++ /* Macros: */ ++ /** Descriptor type value for a DFU class functional descriptor. */ ++ #define DTYPE_DFUFunctional 0x21 ++ ++ /** DFU attribute mask, indicating that the DFU device will detach and re-attach when a DFU_DETACH ++ * command is issued, rather than the host issuing a USB Reset. ++ */ ++ #define ATTR_WILL_DETATCH (1 << 3) ++ ++ /** DFU attribute mask, indicating that the DFU device can communicate during the manifestation phase ++ * (memory programming phase). ++ */ ++ #define ATTR_MANEFESTATION_TOLLERANT (1 << 2) ++ ++ /** DFU attribute mask, indicating that the DFU device can accept DFU_UPLOAD requests to send data from ++ * the device to the host. ++ */ ++ #define ATTR_CAN_UPLOAD (1 << 1) ++ ++ /** DFU attribute mask, indicating that the DFU device can accept DFU_DNLOAD requests to send data from ++ * the host to the device. ++ */ ++ #define ATTR_CAN_DOWNLOAD (1 << 0) ++ ++ #if defined(__AVR_AT90USB1287__) ++ #define PRODUCT_ID_CODE 0x2FFB ++ #define AVR_SIGNATURE_1 0x1E ++ #define AVR_SIGNATURE_2 0x97 ++ #define AVR_SIGNATURE_3 0x82 ++ #elif defined(__AVR_AT90USB647__) ++ #define PRODUCT_ID_CODE 0x2FF9 ++ #define AVR_SIGNATURE_1 0x1E ++ #define AVR_SIGNATURE_2 0x96 ++ #define AVR_SIGNATURE_3 0x82 ++ #elif defined(__AVR_AT90USB1286__) ++ #define PRODUCT_ID_CODE 0x2FFB ++ #define AVR_SIGNATURE_1 0x1E ++ #define AVR_SIGNATURE_2 0x97 ++ #define AVR_SIGNATURE_3 0x82 ++ #elif defined(__AVR_AT90USB646__) ++ #define PRODUCT_ID_CODE 0x2FF9 ++ #define AVR_SIGNATURE_1 0x1E ++ #define AVR_SIGNATURE_2 0x96 ++ #define AVR_SIGNATURE_3 0x82 ++ #elif defined(__AVR_ATmega32U4__) ++ #define PRODUCT_ID_CODE 0x2FF4 ++ #define AVR_SIGNATURE_1 0x1E ++ #define AVR_SIGNATURE_2 0x95 ++ #define AVR_SIGNATURE_3 0x87 ++ #elif defined(__AVR_ATmega16U4__) ++ #define PRODUCT_ID_CODE 0x2FF3 ++ #define AVR_SIGNATURE_1 0x1E ++ #define AVR_SIGNATURE_2 0x94 ++ #define AVR_SIGNATURE_3 0x88 ++ #elif defined(__AVR_ATmega32U2__) ++ #define PRODUCT_ID_CODE 0x2FF0 ++ #define AVR_SIGNATURE_1 0x1E ++ #define AVR_SIGNATURE_2 0x95 ++ #define AVR_SIGNATURE_3 0x8A ++ #elif defined(__AVR_ATmega16U2__) ++ #define PRODUCT_ID_CODE 0x2FEF ++ #define AVR_SIGNATURE_1 0x1E ++ #define AVR_SIGNATURE_2 0x94 ++ #define AVR_SIGNATURE_3 0x89 ++ #elif defined(__AVR_AT90USB162__) ++ #define PRODUCT_ID_CODE 0x2FFA ++ #define AVR_SIGNATURE_1 0x1E ++ #define AVR_SIGNATURE_2 0x94 ++ #define AVR_SIGNATURE_3 0x82 ++ #elif defined(__AVR_ATmega8U2__) ++ #define PRODUCT_ID_CODE 0x2FEE ++ #define AVR_SIGNATURE_1 0x1E ++ #define AVR_SIGNATURE_2 0x93 ++ #define AVR_SIGNATURE_3 0x89 ++ #elif defined(__AVR_AT90USB82__) ++ #define PRODUCT_ID_CODE 0x2FF7 ++ #define AVR_SIGNATURE_1 0x1E ++ #define AVR_SIGNATURE_2 0x93 ++ #define AVR_SIGNATURE_3 0x82 ++ #else ++ #error The selected AVR part is not currently supported by this bootloader. ++ #endif ++ ++ #if !defined(PRODUCT_ID_CODE) ++ #error Current AVR model is not supported by this bootloader. ++ #endif ++ ++ /* Type Defines: */ ++ /** Type define for a DFU class function descriptor. This descriptor gives DFU class information ++ * to the host when read, indicating the DFU device's capabilities. ++ */ ++ typedef struct ++ { ++ USB_Descriptor_Header_t Header; /**< Standard descriptor header structure */ ++ ++ uint8_t Attributes; /**< DFU device attributes, a mask comprising of the ++ * ATTR_* macros listed in this source file ++ */ ++ uint16_t DetachTimeout; /**< Timeout in milliseconds between a USB_DETACH ++ * command being issued and the device detaching ++ * from the USB bus ++ */ ++ uint16_t TransferSize; /**< Maximum number of bytes the DFU device can accept ++ * from the host in a transaction ++ */ ++ uint16_t DFUSpecification; /**< BCD packed DFU specification number this DFU ++ * device complies with ++ */ ++ } USB_Descriptor_DFU_Functional_t; ++ ++ /** Type define for the device configuration descriptor structure. This must be defined in the ++ * application code, as the configuration descriptor contains several sub-descriptors which ++ * vary between devices, and which describe the device's usage to the host. ++ */ ++ typedef struct ++ { ++ USB_Descriptor_Configuration_Header_t Config; ++ ++ // DFU Interface ++ USB_Descriptor_Interface_t DFU_Interface; ++ USB_Descriptor_DFU_Functional_t DFU_Functional; ++ } USB_Descriptor_Configuration_t; ++ ++ /** Enum for the device interface descriptor IDs within the device. Each interface descriptor ++ * should have a unique ID index associated with it, which can be used to refer to the ++ * interface from other descriptors. ++ */ ++ enum InterfaceDescriptors_t ++ { ++ INTERFACE_ID_DFU = 0, /**< DFU interface descriptor ID */ ++ }; ++ ++ /** Enum for the device string descriptor IDs within the device. Each string descriptor should ++ * have a unique ID index associated with it, which can be used to refer to the string from ++ * other descriptors. ++ */ ++ enum StringDescriptors_t ++ { ++ STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */ ++ STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */ ++ STRING_ID_Product = 2, /**< Product string ID */ ++ }; ++ ++ /* Function Prototypes: */ ++ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ++ const uint16_t wIndex, ++ const void** const DescriptorAddress) ++ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); ++ ++#endif ++ diff --cc lib/lufa/Bootloaders/DFU/asf.xml index 000000000,000000000..6f3312b76 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/DFU/asf.xml @@@ -1,0 -1,0 +1,156 @@@ ++<asf xmlversion="1.0"> ++ <project caption="DFU Bootloader - 128KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.128_4" force-caption="true" workspace-name="lufa_dfu_128kb_4kb_"> ++ <require idref="lufa.bootloaders.dfu"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <config name="config.compiler.optimization.level" value="size"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ ++ <build type="define" name="BOOT_START_ADDR" value="0x1F000"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.text=0x1F000"/> ++ ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FFA0"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FFE0"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FFF8"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/> ++ </project> ++ ++ <project caption="DFU Bootloader - 64KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.64_4" force-caption="true" workspace-name="lufa_dfu_64kb_4kb_"> ++ <require idref="lufa.bootloaders.dfu"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb647"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <config name="config.compiler.optimization.level" value="size"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ ++ <build type="define" name="BOOT_START_ADDR" value="0xF000"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.text=0xF000"/> ++ ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0xFFA0"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0xFFE0"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0xFFF8"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/> ++ </project> ++ ++ <project caption="DFU Bootloader - 32KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.32_4" force-caption="true" workspace-name="lufa_dfu_32kb_4kb_"> ++ <require idref="lufa.bootloaders.dfu"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atmega32u4"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <config name="config.compiler.optimization.level" value="size"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ ++ <build type="define" name="BOOT_START_ADDR" value="0x7000"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/> ++ ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x7FA0"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x7FE0"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x7FF8"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/> ++ </project> ++ ++ <project caption="DFU Bootloader - 16KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.16_4" force-caption="true" workspace-name="lufa_dfu_16kb_4kb_"> ++ <require idref="lufa.bootloaders.dfu"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atmega16u2"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ ++ <build type="define" name="BOOT_START_ADDR" value="0x3000"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.text=0x3000"/> ++ ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x3FA0"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x3FE0"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x3FF8"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/> ++ </project> ++ ++ <project caption="DFU Bootloader - 8KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.8_4" force-caption="true" workspace-name="lufa_dfu_8kb_4kb_"> ++ <require idref="lufa.bootloaders.dfu"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atmega8u2"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ ++ <build type="define" name="BOOT_START_ADDR" value="0x1000"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.text=0x1000"/> ++ ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FA0"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FE0"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FF8"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/> ++ </project> ++ ++ <module type="application" id="lufa.bootloaders.dfu" caption="DFU Bootloader"> ++ <info type="description" value="summary"> ++ DFU Class Bootloader, capable of reprogramming a device using the Atmel FLIP or other AVR DFU programming software when plugged into a host. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Bootloaders"/> ++ <keyword value="USB Device"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="include-path" value="."/> ++ <build type="c-source" value="BootloaderDFU.c"/> ++ <build type="header-file" value="BootloaderDFU.h"/> ++ <build type="c-source" value="Descriptors.c"/> ++ <build type="header-file" value="Descriptors.h"/> ++ <build type="c-source" value="BootloaderAPI.c"/> ++ <build type="header-file" value="BootloaderAPI.h"/> ++ <build type="asm-source" value="BootloaderAPITable.S"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ <build type="header-file" value="Config/AppConfig.h"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="BootloaderDFU.txt"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ </module> ++</asf> diff --cc lib/lufa/Bootloaders/DFU/doxyfile index 000000000,000000000..cbb03d6fa new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/DFU/doxyfile @@@ -1,0 -1,0 +1,2396 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - DFU Class Bootloader" ++ ++# The PROJECT_NUMBER tag can be used to enter a project or revision number. This ++# could be handy for archiving the generated documentation or if some version ++# control system is used. ++ ++PROJECT_NUMBER = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM \ ++ ATTR_NO_INIT ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Bootloaders/DFU/makefile index 000000000,000000000..0d2014015 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/DFU/makefile @@@ -1,0 -1,0 +1,62 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = atmega32u4 ++ARCH = AVR8 ++BOARD = QMK ++F_CPU = 16000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = BootloaderDFU ++SRC = $(TARGET).c Descriptors.c BootloaderAPI.c BootloaderAPITable.S $(LUFA_SRC_USB) ++LUFA_PATH = ../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ -DBOOT_START_ADDR=$(BOOT_START_OFFSET) ++LD_FLAGS = -Wl,--section-start=.text=$(BOOT_START_OFFSET) $(BOOT_API_LD_FLAGS) ++ ++# Flash size and bootloader section sizes of the target, in KB. These must ++# match the target's total FLASH size and the bootloader size set in the ++# device's fuses. ++FLASH_SIZE_KB = 32 ++BOOT_SECTION_SIZE_KB = 4 ++ ++# Bootloader address calculation formulas ++# Do not modify these macros, but rather modify the dependent values above. ++CALC_ADDRESS_IN_HEX = $(shell printf "0x%X" $$(( $(1) )) ) ++BOOT_START_OFFSET = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024 ) ++BOOT_SEC_OFFSET = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) * 1024) - ($(strip $(1))) ) ++ ++# Bootloader linker section flags for relocating the API table sections to ++# known FLASH addresses - these should not normally be user-edited. ++BOOT_SECTION_LD_FLAG = -Wl,--section-start=$(strip $(1))=$(call BOOT_SEC_OFFSET, $(3)) -Wl,--undefined=$(strip $(2)) ++BOOT_API_LD_FLAGS = $(call BOOT_SECTION_LD_FLAG, .apitable_trampolines, BootloaderAPI_Trampolines, 96) ++BOOT_API_LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .apitable_jumptable, BootloaderAPI_JumpTable, 32) ++BOOT_API_LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .apitable_signatures, BootloaderAPI_Signatures, 8) ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Bootloaders/HID/BootloaderHID.c index 000000000,000000000..fa1dd5873 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/HID/BootloaderHID.c @@@ -1,0 -1,0 +1,198 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 HID class bootloader. This file contains the complete bootloader logic. ++ */ ++ ++#include "BootloaderHID.h" ++ ++/** Flag to indicate if the bootloader should be running, or should exit and allow the application code to run ++ * via a soft reset. When cleared, the bootloader will abort, the USB interface will shut down and the application ++ * started via a forced watchdog reset. ++ */ ++static bool RunBootloader = true; ++ ++/** Magic lock for forced application start. If the HWBE fuse is programmed and BOOTRST is unprogrammed, the bootloader ++ * will start if the /HWB line of the AVR is held low and the system is reset. However, if the /HWB line is still held ++ * low when the application attempts to start via a watchdog reset, the bootloader will re-start. If set to the value ++ * \ref MAGIC_BOOT_KEY the special init function \ref Application_Jump_Check() will force the application to start. ++ */ ++uint16_t MagicBootKey ATTR_NO_INIT; ++ ++ ++/** Special startup routine to check if the bootloader was started via a watchdog reset, and if the magic application ++ * start key has been loaded into \ref MagicBootKey. If the bootloader started via the watchdog and the key is valid, ++ * this will force the user application to start via a software jump. ++ */ ++void Application_Jump_Check(void) ++{ ++ /* If the reset source was the bootloader and the key is correct, clear it and jump to the application */ ++ if ((MCUSR & (1 << WDRF)) && (MagicBootKey == MAGIC_BOOT_KEY)) ++ { ++ /* Turn off the watchdog */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Clear the boot key and jump to the user application */ ++ MagicBootKey = 0; ++ ++ // cppcheck-suppress constStatement ++ ((void (*)(void))0x0000)(); ++ } ++} ++ ++/** Main program entry point. This routine configures the hardware required by the bootloader, then continuously ++ * runs the bootloader processing routine until instructed to soft-exit. ++ */ ++int main(void) ++{ ++ /* Setup hardware required for the bootloader */ ++ SetupHardware(); ++ ++ /* Enable global interrupts so that the USB stack can function */ ++ GlobalInterruptEnable(); ++ ++ while (RunBootloader) ++ USB_USBTask(); ++ ++ /* Disconnect from the host - USB interface will be reset later along with the AVR */ ++ USB_Detach(); ++ ++ /* Unlock the forced application start mode of the bootloader if it is restarted */ ++ MagicBootKey = MAGIC_BOOT_KEY; ++ ++ /* Enable the watchdog and force a timeout to reset the AVR */ ++ wdt_enable(WDTO_250MS); ++ ++ for (;;); ++} ++ ++/** Configures all hardware required for the bootloader. */ ++static void SetupHardware(void) ++{ ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++ ++ /* Relocate the interrupt vector table to the bootloader section */ ++ MCUCR = (1 << IVCE); ++ MCUCR = (1 << IVSEL); ++ ++ /* Initialize USB subsystem */ ++ USB_Init(); ++} ++ ++/** Event handler for the USB_ConfigurationChanged event. This configures the device's endpoints ready ++ * to relay data to and from the attached USB host. ++ */ ++void EVENT_USB_Device_ConfigurationChanged(void) ++{ ++ /* Setup HID Report Endpoint */ ++ Endpoint_ConfigureEndpoint(HID_IN_EPADDR, EP_TYPE_INTERRUPT, HID_IN_EPSIZE, 1); ++} ++ ++/** Event handler for the USB_ControlRequest event. This is used to catch and process control requests sent to ++ * the device from the USB host before passing along unhandled control requests to the library for processing ++ * internally. ++ */ ++void EVENT_USB_Device_ControlRequest(void) ++{ ++ /* Ignore any requests that aren't directed to the HID interface */ ++ if ((USB_ControlRequest.bmRequestType & (CONTROL_REQTYPE_TYPE | CONTROL_REQTYPE_RECIPIENT)) != ++ (REQTYPE_CLASS | REQREC_INTERFACE)) ++ { ++ return; ++ } ++ ++ /* Process HID specific control requests */ ++ switch (USB_ControlRequest.bRequest) ++ { ++ case HID_REQ_SetReport: ++ Endpoint_ClearSETUP(); ++ ++ /* Wait until the command has been sent by the host */ ++ while (!(Endpoint_IsOUTReceived())); ++ ++ /* Read in the write destination address */ ++ #if (FLASHEND > 0xFFFF) ++ uint32_t PageAddress = ((uint32_t)Endpoint_Read_16_LE() << 8); ++ #else ++ uint16_t PageAddress = Endpoint_Read_16_LE(); ++ #endif ++ ++ /* Check if the command is a program page command, or a start application command */ ++ #if (FLASHEND > 0xFFFF) ++ if ((uint16_t)(PageAddress >> 8) == COMMAND_STARTAPPLICATION) ++ #else ++ if (PageAddress == COMMAND_STARTAPPLICATION) ++ #endif ++ { ++ RunBootloader = false; ++ } ++ else if (PageAddress < BOOT_START_ADDR) ++ { ++ /* Erase the given FLASH page, ready to be programmed */ ++ boot_page_erase(PageAddress); ++ boot_spm_busy_wait(); ++ ++ /* Write each of the FLASH page's bytes in sequence */ ++ for (uint8_t PageWord = 0; PageWord < (SPM_PAGESIZE / 2); PageWord++) ++ { ++ /* Check if endpoint is empty - if so clear it and wait until ready for next packet */ ++ if (!(Endpoint_BytesInEndpoint())) ++ { ++ Endpoint_ClearOUT(); ++ while (!(Endpoint_IsOUTReceived())); ++ } ++ ++ /* Write the next data word to the FLASH page */ ++ boot_page_fill(PageAddress + ((uint16_t)PageWord << 1), Endpoint_Read_16_LE()); ++ } ++ ++ /* Write the filled FLASH page to memory */ ++ boot_page_write(PageAddress); ++ boot_spm_busy_wait(); ++ ++ /* Re-enable RWW section */ ++ boot_rww_enable(); ++ } ++ ++ Endpoint_ClearOUT(); ++ ++ Endpoint_ClearStatusStage(); ++ break; ++ } ++} ++ diff --cc lib/lufa/Bootloaders/HID/BootloaderHID.h index 000000000,000000000..62ee07de3 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/HID/BootloaderHID.h @@@ -1,0 -1,0 +1,71 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 BootloaderHID.c. ++ */ ++ ++#ifndef _BOOTLOADERHID_H_ ++#define _BOOTLOADERHID_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/boot.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <stdbool.h> ++ ++ #include "Descriptors.h" ++ ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Platform/Platform.h> ++ ++ /* Preprocessor Checks: */ ++ #if !defined(__OPTIMIZE_SIZE__) ++ #error This bootloader requires that it be optimized for size, not speed, to fit into the target device. Change optimization settings and try again. ++ #endif ++ ++ /* Macros: */ ++ /** Bootloader special address to start the user application */ ++ #define COMMAND_STARTAPPLICATION 0xFFFF ++ ++ /** Magic bootloader key to unlock forced application start mode. */ ++ #define MAGIC_BOOT_KEY 0xDC42 ++ ++ /* Function Prototypes: */ ++ static void SetupHardware(void); ++ ++ void Application_Jump_Check(void) ATTR_INIT_SECTION(3); ++ ++ void EVENT_USB_Device_ConfigurationChanged(void); ++ ++#endif diff --cc lib/lufa/Bootloaders/HID/BootloaderHID.txt index 000000000,000000000..e340703c4 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/HID/BootloaderHID.txt @@@ -1,0 -1,0 +1,105 @@@ ++/** \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 HID Class USB AVR Bootloader ++ * ++ * \section SSec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * \li Series 6 USB AVRs (AT90USBxxx6) ++ * \li Series 4 USB AVRs (ATMEGAxxU4) ++ * \li Series 2 USB AVRs (AT90USBxx2, ATMEGAxxU2) ++ * ++ * \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>Human Interface Device Class (HID)</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>N/A</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF HID Class Standard \n ++ * Teensy Programming Protocol Specification</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Low Speed Mode \n ++ * Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section SSec_Description Project Description: ++ * ++ * This bootloader enumerates to the host as a HID Class device, allowing for device FLASH programming through ++ * the supplied command line software, which is a modified version of Paul's TeensyHID Command Line loader code ++ * from PJRC (used with permission). This bootloader is deliberately non-compatible with the proprietary PJRC ++ * HalfKay bootloader GUI; only the command line interface software accompanying this bootloader will work with it. ++ * ++ * Out of the box this bootloader builds for the AT90USB1287 with an 8KB bootloader section size, and will fit ++ * into 2KB of bootloader space for the Series 2 USB AVRs (ATMEGAxxU2, AT90USBxx2) or 4KB of bootloader space for ++ * all other models. If you wish to alter this size and/or change the AVR model, you will need to edit the MCU, ++ * FLASH_SIZE_KB and BOOT_SECTION_SIZE_KB values in the accompanying makefile. ++ * ++ * \warning <b>THIS BOOTLOADER IS NOT SECURE.</b> Malicious entities can recover written data, even if the device ++ * lockbits are set. ++ * ++ * \section Sec_Running Running the Bootloader ++ * ++ * This bootloader is designed to be started via the \c HWB mechanism of the USB AVRs; ground the \c HWB pin (see device ++ * datasheet) then momentarily ground \c /RESET to start the bootloader. This assumes the \c HWBE fuse is set and the ++ * \c BOOTRST fuse is cleared. ++ * ++ * \section Sec_Installation Driver Installation ++ * ++ * This bootloader uses the HID class driver inbuilt into all modern operating systems, thus no additional drivers ++ * need to be supplied for correct operation. ++ * ++ * \section Sec_HostApp Host Controller Application ++ * ++ * Due to licensing issues, the supplied bootloader is compatible with the HalfKay bootloader protocol designed ++ * by PJRC, but is <b>not compatible with the cross-platform loader GUI</b>. A modified version of the open source ++ * cross-platform TeensyLoader application is supplied, which can be compiled under most operating systems. The ++ * command-line loader application should remain compatible with genuine Teensy boards in addition to boards using ++ * this custom bootloader. ++ * ++ * Once compiled, programs can be loaded into the AVR's FLASH memory through the following example command: ++ * \code ++ * hid_bootloader_cli -mmcu=at90usb1287 Mouse.hex ++ * \endcode ++ * ++ * \section Sec_KnownIssues Known Issues: ++ * ++ * \par After loading an application, it is not run automatically on startup. ++ * Some USB AVR boards ship with the \c BOOTRST fuse set, causing the bootloader ++ * to run automatically when the device is reset. This booloader requires the ++ * \c BOOTRST be disabled and the HWBE fuse used instead to run the bootloader ++ * when needed. ++ * ++ * \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> ++ */ diff --cc lib/lufa/Bootloaders/HID/Config/LUFAConfig.h index 000000000,000000000..5aa0e765b new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/HID/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++ #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++ #define USB_DEVICE_ONLY ++// #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++ #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++ #define USE_RAM_DESCRIPTORS ++// #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++ #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++ #define DEVICE_STATE_AS_GPIOR 0 ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++ #define NO_DEVICE_REMOTE_WAKEUP ++ #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Bootloaders/HID/Descriptors.c index 000000000,000000000..854ae1b63 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/HID/Descriptors.c @@@ -1,0 -1,0 +1,187 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special ++ * computer-readable structures which the host requests upon device enumeration, to determine ++ * the device's capabilities and functions. ++ */ ++ ++#include "Descriptors.h" ++ ++/** HID class report descriptor. This is a special descriptor constructed with values from the ++ * USBIF HID class specification to describe the reports and capabilities of the HID device. This ++ * descriptor is parsed by the host and its contents used to determine what data (and in what encoding) ++ * the device will send, and what it may be sent back from the host. Refer to the HID specification for ++ * more details on HID report descriptors. ++ */ ++const USB_Descriptor_HIDReport_Datatype_t HIDReport[] = ++{ ++ HID_RI_USAGE_PAGE(16, 0xFFDC), /* Vendor Page 0xDC */ ++ HID_RI_USAGE(8, 0xFB), /* Vendor Usage 0xFB */ ++ HID_RI_COLLECTION(8, 0x01), /* Vendor Usage 1 */ ++ HID_RI_USAGE(8, 0x02), /* Vendor Usage 2 */ ++ HID_RI_LOGICAL_MINIMUM(8, 0x00), ++ HID_RI_LOGICAL_MAXIMUM(8, 0xFF), ++ HID_RI_REPORT_SIZE(8, 0x08), ++ HID_RI_REPORT_COUNT(16, (sizeof(uint16_t) + SPM_PAGESIZE)), ++ HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE), ++ HID_RI_END_COLLECTION(0), ++}; ++ ++/** Device descriptor structure. This descriptor, located in SRAM memory, describes the overall ++ * device characteristics, including the supported USB version, control endpoint size and the ++ * number of device configurations. The descriptor is read out by the USB host when the enumeration ++ * process begins. ++ */ ++const USB_Descriptor_Device_t DeviceDescriptor = ++{ ++ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, ++ ++ .USBSpecification = VERSION_BCD(1,1,0), ++ .Class = USB_CSCP_NoDeviceClass, ++ .SubClass = USB_CSCP_NoDeviceSubclass, ++ .Protocol = USB_CSCP_NoDeviceProtocol, ++ ++ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, ++ ++ .VendorID = 0x03EB, ++ .ProductID = 0x2067, ++ .ReleaseNumber = VERSION_BCD(0,0,1), ++ ++ .ManufacturerStrIndex = NO_DESCRIPTOR, ++ .ProductStrIndex = NO_DESCRIPTOR, ++ .SerialNumStrIndex = NO_DESCRIPTOR, ++ ++ .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS ++}; ++ ++/** Configuration descriptor structure. This descriptor, located in SRAM memory, describes the usage ++ * of the device in one of its supported configurations, including information about any device interfaces ++ * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting ++ * a configuration so that the host may correctly communicate with the USB device. ++ */ ++const USB_Descriptor_Configuration_t ConfigurationDescriptor = ++{ ++ .Config = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration}, ++ ++ .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t), ++ .TotalInterfaces = 1, ++ ++ .ConfigurationNumber = 1, ++ .ConfigurationStrIndex = NO_DESCRIPTOR, ++ ++ .ConfigAttributes = USB_CONFIG_ATTR_RESERVED, ++ ++ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) ++ }, ++ ++ .HID_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_GenericHID, ++ .AlternateSetting = 0x00, ++ ++ .TotalEndpoints = 1, ++ ++ .Class = HID_CSCP_HIDClass, ++ .SubClass = HID_CSCP_NonBootSubclass, ++ .Protocol = HID_CSCP_NonBootProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .HID_VendorHID = ++ { ++ .Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID}, ++ ++ .HIDSpec = VERSION_BCD(1,1,1), ++ .CountryCode = 0x00, ++ .TotalReportDescriptors = 1, ++ .HIDReportType = HID_DTYPE_Report, ++ .HIDReportLength = sizeof(HIDReport) ++ }, ++ ++ .HID_ReportINEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = HID_IN_EPADDR, ++ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = HID_IN_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++}; ++ ++/** 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 uint16_t wIndex, ++ const void** const DescriptorAddress) ++{ ++ const uint8_t DescriptorType = (wValue >> 8); ++ ++ const void* Address = NULL; ++ uint16_t Size = NO_DESCRIPTOR; ++ ++ /* If/Else If chain compiles slightly smaller than a switch case */ ++ if (DescriptorType == DTYPE_Device) ++ { ++ Address = &DeviceDescriptor; ++ Size = sizeof(USB_Descriptor_Device_t); ++ } ++ else if (DescriptorType == DTYPE_Configuration) ++ { ++ Address = &ConfigurationDescriptor; ++ Size = sizeof(USB_Descriptor_Configuration_t); ++ } ++ else if (DescriptorType == HID_DTYPE_HID) ++ { ++ Address = &ConfigurationDescriptor.HID_VendorHID; ++ Size = sizeof(USB_HID_Descriptor_HID_t); ++ } ++ else if (DescriptorType == HID_DTYPE_Report) ++ { ++ Address = &HIDReport; ++ Size = sizeof(HIDReport); ++ } ++ ++ *DescriptorAddress = Address; ++ return Size; ++} ++ diff --cc lib/lufa/Bootloaders/HID/Descriptors.h index 000000000,000000000..5516b1635 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/HID/Descriptors.h @@@ -1,0 -1,0 +1,80 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * Header file for Descriptors.c. ++ */ ++ ++#ifndef _DESCRIPTORS_H_ ++#define _DESCRIPTORS_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ /* Type Defines: */ ++ /** Type define for the 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; ++ ++ // Generic HID Interface ++ USB_Descriptor_Interface_t HID_Interface; ++ USB_HID_Descriptor_HID_t HID_VendorHID; ++ USB_Descriptor_Endpoint_t HID_ReportINEndpoint; ++ } USB_Descriptor_Configuration_t; ++ ++ /** Enum for the device interface descriptor IDs within the device. Each interface descriptor ++ * should have a unique ID index associated with it, which can be used to refer to the ++ * interface from other descriptors. ++ */ ++ enum InterfaceDescriptors_t ++ { ++ INTERFACE_ID_GenericHID = 0, /**< GenericHID interface descriptor ID */ ++ }; ++ ++ /* Macros: */ ++ /** Endpoint address of the HID data IN endpoint. */ ++ #define HID_IN_EPADDR (ENDPOINT_DIR_IN | 1) ++ ++ /** Size in bytes of the HID reporting IN endpoint. */ ++ #define HID_IN_EPSIZE 64 ++ ++ /* Function Prototypes: */ ++ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ++ const uint16_t wIndex, ++ const void** const DescriptorAddress) ++ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); ++ ++#endif ++ diff --cc lib/lufa/Bootloaders/HID/HostLoaderApp/.gitignore index 000000000,000000000..4e73d1ec5 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/HID/HostLoaderApp/.gitignore @@@ -1,0 -1,0 +1,1 @@@ ++hid_bootloader_cli diff --cc lib/lufa/Bootloaders/HID/HostLoaderApp/Makefile index 000000000,000000000..d7d6458a5 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/HID/HostLoaderApp/Makefile @@@ -1,0 -1,0 +1,40 @@@ ++OS ?= LINUX ++#OS ?= WINDOWS ++#OS ?= MACOSX ++#OS ?= BSD ++ ++ifeq ($(OS), LINUX) # also works on FreeBSD ++CC ?= gcc ++CFLAGS ?= -O2 -Wall ++hid_bootloader_cli: hid_bootloader_cli.c ++ $(CC) $(CFLAGS) -s -DUSE_LIBUSB -o hid_bootloader_cli hid_bootloader_cli.c -lusb ++ ++ ++else ifeq ($(OS), WINDOWS) ++CC = i586-mingw32msvc-gcc ++CFLAGS ?= -O2 -Wall ++LDLIB = -lsetupapi -lhid ++hid_bootloader_cli.exe: hid_bootloader_cli.c ++ $(CC) $(CFLAGS) -s -DUSE_WIN32 -o hid_bootloader_cli.exe hid_bootloader_cli.c $(LDLIB) ++ ++ ++else ifeq ($(OS), MACOSX) ++CC ?= gcc ++SDK ?= /Developer/SDKs/MacOSX10.5.sdk ++CFLAGS ?= -O2 -Wall ++hid_bootloader_cli: hid_bootloader_cli.c ++ $(CC) $(CFLAGS) -DUSE_APPLE_IOKIT -isysroot $(SDK) -o hid_bootloader_cli hid_bootloader_cli.c -Wl,-syslibroot,$(SDK) -framework IOKit -framework CoreFoundation ++ ++ ++else ifeq ($(OS), BSD) # works on NetBSD and OpenBSD ++CC ?= gcct ++CFLAGS ?= -O2 -Wall ++hid_bootloader_cli: hid_bootloader_cli.c ++ $(CC) $(CFLAGS) -s -DUSE_UHID -o hid_bootloader_cli hid_bootloader_cli.c ++ ++ ++endif ++ ++ ++clean: ++ rm -f hid_bootloader_cli hid_bootloader_cli.exe diff --cc lib/lufa/Bootloaders/HID/HostLoaderApp/Makefile.bsd index 000000000,000000000..a15a66405 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/HID/HostLoaderApp/Makefile.bsd @@@ -1,0 -1,0 +1,21 @@@ ++OS ?= FreeBSD ++#OS ?= NetBSD ++#OS ?= OpenBSD ++ ++CFLAGS ?= -O2 -Wall ++CC ?= gcc ++ ++.if $(OS) == "FreeBSD" ++CFLAGS += -DUSE_LIBUSB ++LIBS = -lusb ++.elif $(OS) == "NetBSD" || $(OS) == "OpenBSD" ++CFLAGS += -DUSE_UHID ++LIBS = ++.endif ++ ++ ++hid_bootloader_cli: hid_bootloader_cli.c ++ $(CC) $(CFLAGS) -s -o hid_bootloader_cli hid_bootloader_cli.c $(LIBS) ++ ++clean: ++ rm -f hid_bootloader_cli diff --cc lib/lufa/Bootloaders/HID/HostLoaderApp/gpl3.txt index 000000000,000000000..94a9ed024 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/HID/HostLoaderApp/gpl3.txt @@@ -1,0 -1,0 +1,674 @@@ ++ GNU GENERAL PUBLIC LICENSE ++ Version 3, 29 June 2007 ++ ++ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> ++ Everyone is permitted to copy and distribute verbatim copies ++ of this license document, but changing it is not allowed. ++ ++ Preamble ++ ++ The GNU General Public License is a free, copyleft license for ++software and other kinds of works. ++ ++ The licenses for most software and other practical works are designed ++to take away your freedom to share and change the works. By contrast, ++the GNU General Public License is intended to guarantee your freedom to ++share and change all versions of a program--to make sure it remains free ++software for all its users. We, the Free Software Foundation, use the ++GNU General Public License for most of our software; it applies also to ++any other work released this way by its authors. You can apply it to ++your programs, too. ++ ++ When we speak of free software, we are referring to freedom, not ++price. Our General Public Licenses are designed to make sure that you ++have the freedom to distribute copies of free software (and charge for ++them if you wish), that you receive source code or can get it if you ++want it, that you can change the software or use pieces of it in new ++free programs, and that you know you can do these things. ++ ++ To protect your rights, we need to prevent others from denying you ++these rights or asking you to surrender the rights. Therefore, you have ++certain responsibilities if you distribute copies of the software, or if ++you modify it: responsibilities to respect the freedom of others. ++ ++ For example, if you distribute copies of such a program, whether ++gratis or for a fee, you must pass on to the recipients the same ++freedoms that you received. You must make sure that they, too, receive ++or can get the source code. And you must show them these terms so they ++know their rights. ++ ++ Developers that use the GNU GPL protect your rights with two steps: ++(1) assert copyright on the software, and (2) offer you this License ++giving you legal permission to copy, distribute and/or modify it. ++ ++ For the developers' and authors' protection, the GPL clearly explains ++that there is no warranty for this free software. For both users' and ++authors' sake, the GPL requires that modified versions be marked as ++changed, so that their problems will not be attributed erroneously to ++authors of previous versions. ++ ++ Some devices are designed to deny users access to install or run ++modified versions of the software inside them, although the manufacturer ++can do so. This is fundamentally incompatible with the aim of ++protecting users' freedom to change the software. The systematic ++pattern of such abuse occurs in the area of products for individuals to ++use, which is precisely where it is most unacceptable. Therefore, we ++have designed this version of the GPL to prohibit the practice for those ++products. If such problems arise substantially in other domains, we ++stand ready to extend this provision to those domains in future versions ++of the GPL, as needed to protect the freedom of users. ++ ++ Finally, every program is threatened constantly by software patents. ++States should not allow patents to restrict development and use of ++software on general-purpose computers, but in those that do, we wish to ++avoid the special danger that patents applied to a free program could ++make it effectively proprietary. To prevent this, the GPL assures that ++patents cannot be used to render the program non-free. ++ ++ The precise terms and conditions for copying, distribution and ++modification follow. ++ ++ TERMS AND CONDITIONS ++ ++ 0. Definitions. ++ ++ "This License" refers to version 3 of the GNU General Public License. ++ ++ "Copyright" also means copyright-like laws that apply to other kinds of ++works, such as semiconductor masks. ++ ++ "The Program" refers to any copyrightable work licensed under this ++License. Each licensee is addressed as "you". "Licensees" and ++"recipients" may be individuals or organizations. ++ ++ To "modify" a work means to copy from or adapt all or part of the work ++in a fashion requiring copyright permission, other than the making of an ++exact copy. The resulting work is called a "modified version" of the ++earlier work or a work "based on" the earlier work. ++ ++ A "covered work" means either the unmodified Program or a work based ++on the Program. ++ ++ To "propagate" a work means to do anything with it that, without ++permission, would make you directly or secondarily liable for ++infringement under applicable copyright law, except executing it on a ++computer or modifying a private copy. Propagation includes copying, ++distribution (with or without modification), making available to the ++public, and in some countries other activities as well. ++ ++ To "convey" a work means any kind of propagation that enables other ++parties to make or receive copies. Mere interaction with a user through ++a computer network, with no transfer of a copy, is not conveying. ++ ++ An interactive user interface displays "Appropriate Legal Notices" ++to the extent that it includes a convenient and prominently visible ++feature that (1) displays an appropriate copyright notice, and (2) ++tells the user that there is no warranty for the work (except to the ++extent that warranties are provided), that licensees may convey the ++work under this License, and how to view a copy of this License. If ++the interface presents a list of user commands or options, such as a ++menu, a prominent item in the list meets this criterion. ++ ++ 1. Source Code. ++ ++ The "source code" for a work means the preferred form of the work ++for making modifications to it. "Object code" means any non-source ++form of a work. ++ ++ A "Standard Interface" means an interface that either is an official ++standard defined by a recognized standards body, or, in the case of ++interfaces specified for a particular programming language, one that ++is widely used among developers working in that language. ++ ++ The "System Libraries" of an executable work include anything, other ++than the work as a whole, that (a) is included in the normal form of ++packaging a Major Component, but which is not part of that Major ++Component, and (b) serves only to enable use of the work with that ++Major Component, or to implement a Standard Interface for which an ++implementation is available to the public in source code form. A ++"Major Component", in this context, means a major essential component ++(kernel, window system, and so on) of the specific operating system ++(if any) on which the executable work runs, or a compiler used to ++produce the work, or an object code interpreter used to run it. ++ ++ The "Corresponding Source" for a work in object code form means all ++the source code needed to generate, install, and (for an executable ++work) run the object code and to modify the work, including scripts to ++control those activities. However, it does not include the work's ++System Libraries, or general-purpose tools or generally available free ++programs which are used unmodified in performing those activities but ++which are not part of the work. For example, Corresponding Source ++includes interface definition files associated with source files for ++the work, and the source code for shared libraries and dynamically ++linked subprograms that the work is specifically designed to require, ++such as by intimate data communication or control flow between those ++subprograms and other parts of the work. ++ ++ The Corresponding Source need not include anything that users ++can regenerate automatically from other parts of the Corresponding ++Source. ++ ++ The Corresponding Source for a work in source code form is that ++same work. ++ ++ 2. Basic Permissions. ++ ++ All rights granted under this License are granted for the term of ++copyright on the Program, and are irrevocable provided the stated ++conditions are met. This License explicitly affirms your unlimited ++permission to run the unmodified Program. The output from running a ++covered work is covered by this License only if the output, given its ++content, constitutes a covered work. This License acknowledges your ++rights of fair use or other equivalent, as provided by copyright law. ++ ++ You may make, run and propagate covered works that you do not ++convey, without conditions so long as your license otherwise remains ++in force. You may convey covered works to others for the sole purpose ++of having them make modifications exclusively for you, or provide you ++with facilities for running those works, provided that you comply with ++the terms of this License in conveying all material for which you do ++not control copyright. Those thus making or running the covered works ++for you must do so exclusively on your behalf, under your direction ++and control, on terms that prohibit them from making any copies of ++your copyrighted material outside their relationship with you. ++ ++ Conveying under any other circumstances is permitted solely under ++the conditions stated below. Sublicensing is not allowed; section 10 ++makes it unnecessary. ++ ++ 3. Protecting Users' Legal Rights From Anti-Circumvention Law. ++ ++ No covered work shall be deemed part of an effective technological ++measure under any applicable law fulfilling obligations under article ++11 of the WIPO copyright treaty adopted on 20 December 1996, or ++similar laws prohibiting or restricting circumvention of such ++measures. ++ ++ When you convey a covered work, you waive any legal power to forbid ++circumvention of technological measures to the extent such circumvention ++is effected by exercising rights under this License with respect to ++the covered work, and you disclaim any intention to limit operation or ++modification of the work as a means of enforcing, against the work's ++users, your or third parties' legal rights to forbid circumvention of ++technological measures. ++ ++ 4. Conveying Verbatim Copies. ++ ++ You may convey verbatim copies of the Program's source code as you ++receive it, in any medium, provided that you conspicuously and ++appropriately publish on each copy an appropriate copyright notice; ++keep intact all notices stating that this License and any ++non-permissive terms added in accord with section 7 apply to the code; ++keep intact all notices of the absence of any warranty; and give all ++recipients a copy of this License along with the Program. ++ ++ You may charge any price or no price for each copy that you convey, ++and you may offer support or warranty protection for a fee. ++ ++ 5. Conveying Modified Source Versions. ++ ++ You may convey a work based on the Program, or the modifications to ++produce it from the Program, in the form of source code under the ++terms of section 4, provided that you also meet all of these conditions: ++ ++ a) The work must carry prominent notices stating that you modified ++ it, and giving a relevant date. ++ ++ b) The work must carry prominent notices stating that it is ++ released under this License and any conditions added under section ++ 7. This requirement modifies the requirement in section 4 to ++ "keep intact all notices". ++ ++ c) You must license the entire work, as a whole, under this ++ License to anyone who comes into possession of a copy. This ++ License will therefore apply, along with any applicable section 7 ++ additional terms, to the whole of the work, and all its parts, ++ regardless of how they are packaged. This License gives no ++ permission to license the work in any other way, but it does not ++ invalidate such permission if you have separately received it. ++ ++ d) If the work has interactive user interfaces, each must display ++ Appropriate Legal Notices; however, if the Program has interactive ++ interfaces that do not display Appropriate Legal Notices, your ++ work need not make them do so. ++ ++ A compilation of a covered work with other separate and independent ++works, which are not by their nature extensions of the covered work, ++and which are not combined with it such as to form a larger program, ++in or on a volume of a storage or distribution medium, is called an ++"aggregate" if the compilation and its resulting copyright are not ++used to limit the access or legal rights of the compilation's users ++beyond what the individual works permit. Inclusion of a covered work ++in an aggregate does not cause this License to apply to the other ++parts of the aggregate. ++ ++ 6. Conveying Non-Source Forms. ++ ++ You may convey a covered work in object code form under the terms ++of sections 4 and 5, provided that you also convey the ++machine-readable Corresponding Source under the terms of this License, ++in one of these ways: ++ ++ a) Convey the object code in, or embodied in, a physical product ++ (including a physical distribution medium), accompanied by the ++ Corresponding Source fixed on a durable physical medium ++ customarily used for software interchange. ++ ++ b) Convey the object code in, or embodied in, a physical product ++ (including a physical distribution medium), accompanied by a ++ written offer, valid for at least three years and valid for as ++ long as you offer spare parts or customer support for that product ++ model, to give anyone who possesses the object code either (1) a ++ copy of the Corresponding Source for all the software in the ++ product that is covered by this License, on a durable physical ++ medium customarily used for software interchange, for a price no ++ more than your reasonable cost of physically performing this ++ conveying of source, or (2) access to copy the ++ Corresponding Source from a network server at no charge. ++ ++ c) Convey individual copies of the object code with a copy of the ++ written offer to provide the Corresponding Source. This ++ alternative is allowed only occasionally and noncommercially, and ++ only if you received the object code with such an offer, in accord ++ with subsection 6b. ++ ++ d) Convey the object code by offering access from a designated ++ place (gratis or for a charge), and offer equivalent access to the ++ Corresponding Source in the same way through the same place at no ++ further charge. You need not require recipients to copy the ++ Corresponding Source along with the object code. If the place to ++ copy the object code is a network server, the Corresponding Source ++ may be on a different server (operated by you or a third party) ++ that supports equivalent copying facilities, provided you maintain ++ clear directions next to the object code saying where to find the ++ Corresponding Source. Regardless of what server hosts the ++ Corresponding Source, you remain obligated to ensure that it is ++ available for as long as needed to satisfy these requirements. ++ ++ e) Convey the object code using peer-to-peer transmission, provided ++ you inform other peers where the object code and Corresponding ++ Source of the work are being offered to the general public at no ++ charge under subsection 6d. ++ ++ A separable portion of the object code, whose source code is excluded ++from the Corresponding Source as a System Library, need not be ++included in conveying the object code work. ++ ++ A "User Product" is either (1) a "consumer product", which means any ++tangible personal property which is normally used for personal, family, ++or household purposes, or (2) anything designed or sold for incorporation ++into a dwelling. In determining whether a product is a consumer product, ++doubtful cases shall be resolved in favor of coverage. For a particular ++product received by a particular user, "normally used" refers to a ++typical or common use of that class of product, regardless of the status ++of the particular user or of the way in which the particular user ++actually uses, or expects or is expected to use, the product. A product ++is a consumer product regardless of whether the product has substantial ++commercial, industrial or non-consumer uses, unless such uses represent ++the only significant mode of use of the product. ++ ++ "Installation Information" for a User Product means any methods, ++procedures, authorization keys, or other information required to install ++and execute modified versions of a covered work in that User Product from ++a modified version of its Corresponding Source. The information must ++suffice to ensure that the continued functioning of the modified object ++code is in no case prevented or interfered with solely because ++modification has been made. ++ ++ If you convey an object code work under this section in, or with, or ++specifically for use in, a User Product, and the conveying occurs as ++part of a transaction in which the right of possession and use of the ++User Product is transferred to the recipient in perpetuity or for a ++fixed term (regardless of how the transaction is characterized), the ++Corresponding Source conveyed under this section must be accompanied ++by the Installation Information. But this requirement does not apply ++if neither you nor any third party retains the ability to install ++modified object code on the User Product (for example, the work has ++been installed in ROM). ++ ++ The requirement to provide Installation Information does not include a ++requirement to continue to provide support service, warranty, or updates ++for a work that has been modified or installed by the recipient, or for ++the User Product in which it has been modified or installed. Access to a ++network may be denied when the modification itself materially and ++adversely affects the operation of the network or violates the rules and ++protocols for communication across the network. ++ ++ Corresponding Source conveyed, and Installation Information provided, ++in accord with this section must be in a format that is publicly ++documented (and with an implementation available to the public in ++source code form), and must require no special password or key for ++unpacking, reading or copying. ++ ++ 7. Additional Terms. ++ ++ "Additional permissions" are terms that supplement the terms of this ++License by making exceptions from one or more of its conditions. ++Additional permissions that are applicable to the entire Program shall ++be treated as though they were included in this License, to the extent ++that they are valid under applicable law. If additional permissions ++apply only to part of the Program, that part may be used separately ++under those permissions, but the entire Program remains governed by ++this License without regard to the additional permissions. ++ ++ When you convey a copy of a covered work, you may at your option ++remove any additional permissions from that copy, or from any part of ++it. (Additional permissions may be written to require their own ++removal in certain cases when you modify the work.) You may place ++additional permissions on material, added by you to a covered work, ++for which you have or can give appropriate copyright permission. ++ ++ Notwithstanding any other provision of this License, for material you ++add to a covered work, you may (if authorized by the copyright holders of ++that material) supplement the terms of this License with terms: ++ ++ a) Disclaiming warranty or limiting liability differently from the ++ terms of sections 15 and 16 of this License; or ++ ++ b) Requiring preservation of specified reasonable legal notices or ++ author attributions in that material or in the Appropriate Legal ++ Notices displayed by works containing it; or ++ ++ c) Prohibiting misrepresentation of the origin of that material, or ++ requiring that modified versions of such material be marked in ++ reasonable ways as different from the original version; or ++ ++ d) Limiting the use for publicity purposes of names of licensors or ++ authors of the material; or ++ ++ e) Declining to grant rights under trademark law for use of some ++ trade names, trademarks, or service marks; or ++ ++ f) Requiring indemnification of licensors and authors of that ++ material by anyone who conveys the material (or modified versions of ++ it) with contractual assumptions of liability to the recipient, for ++ any liability that these contractual assumptions directly impose on ++ those licensors and authors. ++ ++ All other non-permissive additional terms are considered "further ++restrictions" within the meaning of section 10. If the Program as you ++received it, or any part of it, contains a notice stating that it is ++governed by this License along with a term that is a further ++restriction, you may remove that term. If a license document contains ++a further restriction but permits relicensing or conveying under this ++License, you may add to a covered work material governed by the terms ++of that license document, provided that the further restriction does ++not survive such relicensing or conveying. ++ ++ If you add terms to a covered work in accord with this section, you ++must place, in the relevant source files, a statement of the ++additional terms that apply to those files, or a notice indicating ++where to find the applicable terms. ++ ++ Additional terms, permissive or non-permissive, may be stated in the ++form of a separately written license, or stated as exceptions; ++the above requirements apply either way. ++ ++ 8. Termination. ++ ++ You may not propagate or modify a covered work except as expressly ++provided under this License. Any attempt otherwise to propagate or ++modify it is void, and will automatically terminate your rights under ++this License (including any patent licenses granted under the third ++paragraph of section 11). ++ ++ However, if you cease all violation of this License, then your ++license from a particular copyright holder is reinstated (a) ++provisionally, unless and until the copyright holder explicitly and ++finally terminates your license, and (b) permanently, if the copyright ++holder fails to notify you of the violation by some reasonable means ++prior to 60 days after the cessation. ++ ++ Moreover, your license from a particular copyright holder is ++reinstated permanently if the copyright holder notifies you of the ++violation by some reasonable means, this is the first time you have ++received notice of violation of this License (for any work) from that ++copyright holder, and you cure the violation prior to 30 days after ++your receipt of the notice. ++ ++ Termination of your rights under this section does not terminate the ++licenses of parties who have received copies or rights from you under ++this License. If your rights have been terminated and not permanently ++reinstated, you do not qualify to receive new licenses for the same ++material under section 10. ++ ++ 9. Acceptance Not Required for Having Copies. ++ ++ You are not required to accept this License in order to receive or ++run a copy of the Program. Ancillary propagation of a covered work ++occurring solely as a consequence of using peer-to-peer transmission ++to receive a copy likewise does not require acceptance. However, ++nothing other than this License grants you permission to propagate or ++modify any covered work. These actions infringe copyright if you do ++not accept this License. Therefore, by modifying or propagating a ++covered work, you indicate your acceptance of this License to do so. ++ ++ 10. Automatic Licensing of Downstream Recipients. ++ ++ Each time you convey a covered work, the recipient automatically ++receives a license from the original licensors, to run, modify and ++propagate that work, subject to this License. You are not responsible ++for enforcing compliance by third parties with this License. ++ ++ An "entity transaction" is a transaction transferring control of an ++organization, or substantially all assets of one, or subdividing an ++organization, or merging organizations. If propagation of a covered ++work results from an entity transaction, each party to that ++transaction who receives a copy of the work also receives whatever ++licenses to the work the party's predecessor in interest had or could ++give under the previous paragraph, plus a right to possession of the ++Corresponding Source of the work from the predecessor in interest, if ++the predecessor has it or can get it with reasonable efforts. ++ ++ You may not impose any further restrictions on the exercise of the ++rights granted or affirmed under this License. For example, you may ++not impose a license fee, royalty, or other charge for exercise of ++rights granted under this License, and you may not initiate litigation ++(including a cross-claim or counterclaim in a lawsuit) alleging that ++any patent claim is infringed by making, using, selling, offering for ++sale, or importing the Program or any portion of it. ++ ++ 11. Patents. ++ ++ A "contributor" is a copyright holder who authorizes use under this ++License of the Program or a work on which the Program is based. The ++work thus licensed is called the contributor's "contributor version". ++ ++ A contributor's "essential patent claims" are all patent claims ++owned or controlled by the contributor, whether already acquired or ++hereafter acquired, that would be infringed by some manner, permitted ++by this License, of making, using, or selling its contributor version, ++but do not include claims that would be infringed only as a ++consequence of further modification of the contributor version. For ++purposes of this definition, "control" includes the right to grant ++patent sublicenses in a manner consistent with the requirements of ++this License. ++ ++ Each contributor grants you a non-exclusive, worldwide, royalty-free ++patent license under the contributor's essential patent claims, to ++make, use, sell, offer for sale, import and otherwise run, modify and ++propagate the contents of its contributor version. ++ ++ In the following three paragraphs, a "patent license" is any express ++agreement or commitment, however denominated, not to enforce a patent ++(such as an express permission to practice a patent or covenant not to ++sue for patent infringement). To "grant" such a patent license to a ++party means to make such an agreement or commitment not to enforce a ++patent against the party. ++ ++ If you convey a covered work, knowingly relying on a patent license, ++and the Corresponding Source of the work is not available for anyone ++to copy, free of charge and under the terms of this License, through a ++publicly available network server or other readily accessible means, ++then you must either (1) cause the Corresponding Source to be so ++available, or (2) arrange to deprive yourself of the benefit of the ++patent license for this particular work, or (3) arrange, in a manner ++consistent with the requirements of this License, to extend the patent ++license to downstream recipients. "Knowingly relying" means you have ++actual knowledge that, but for the patent license, your conveying the ++covered work in a country, or your recipient's use of the covered work ++in a country, would infringe one or more identifiable patents in that ++country that you have reason to believe are valid. ++ ++ If, pursuant to or in connection with a single transaction or ++arrangement, you convey, or propagate by procuring conveyance of, a ++covered work, and grant a patent license to some of the parties ++receiving the covered work authorizing them to use, propagate, modify ++or convey a specific copy of the covered work, then the patent license ++you grant is automatically extended to all recipients of the covered ++work and works based on it. ++ ++ A patent license is "discriminatory" if it does not include within ++the scope of its coverage, prohibits the exercise of, or is ++conditioned on the non-exercise of one or more of the rights that are ++specifically granted under this License. You may not convey a covered ++work if you are a party to an arrangement with a third party that is ++in the business of distributing software, under which you make payment ++to the third party based on the extent of your activity of conveying ++the work, and under which the third party grants, to any of the ++parties who would receive the covered work from you, a discriminatory ++patent license (a) in connection with copies of the covered work ++conveyed by you (or copies made from those copies), or (b) primarily ++for and in connection with specific products or compilations that ++contain the covered work, unless you entered into that arrangement, ++or that patent license was granted, prior to 28 March 2007. ++ ++ Nothing in this License shall be construed as excluding or limiting ++any implied license or other defenses to infringement that may ++otherwise be available to you under applicable patent law. ++ ++ 12. No Surrender of Others' Freedom. ++ ++ If conditions are imposed on you (whether by court order, agreement or ++otherwise) that contradict the conditions of this License, they do not ++excuse you from the conditions of this License. If you cannot convey a ++covered work so as to satisfy simultaneously your obligations under this ++License and any other pertinent obligations, then as a consequence you may ++not convey it at all. For example, if you agree to terms that obligate you ++to collect a royalty for further conveying from those to whom you convey ++the Program, the only way you could satisfy both those terms and this ++License would be to refrain entirely from conveying the Program. ++ ++ 13. Use with the GNU Affero General Public License. ++ ++ Notwithstanding any other provision of this License, you have ++permission to link or combine any covered work with a work licensed ++under version 3 of the GNU Affero General Public License into a single ++combined work, and to convey the resulting work. The terms of this ++License will continue to apply to the part which is the covered work, ++but the special requirements of the GNU Affero General Public License, ++section 13, concerning interaction through a network will apply to the ++combination as such. ++ ++ 14. Revised Versions of this License. ++ ++ The Free Software Foundation may publish revised and/or new versions of ++the GNU General Public License from time to time. Such new versions will ++be similar in spirit to the present version, but may differ in detail to ++address new problems or concerns. ++ ++ Each version is given a distinguishing version number. If the ++Program specifies that a certain numbered version of the GNU General ++Public License "or any later version" applies to it, you have the ++option of following the terms and conditions either of that numbered ++version or of any later version published by the Free Software ++Foundation. If the Program does not specify a version number of the ++GNU General Public License, you may choose any version ever published ++by the Free Software Foundation. ++ ++ If the Program specifies that a proxy can decide which future ++versions of the GNU General Public License can be used, that proxy's ++public statement of acceptance of a version permanently authorizes you ++to choose that version for the Program. ++ ++ Later license versions may give you additional or different ++permissions. However, no additional obligations are imposed on any ++author or copyright holder as a result of your choosing to follow a ++later version. ++ ++ 15. Disclaimer of Warranty. ++ ++ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY ++APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT ++HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY ++OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, ++THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR ++PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM ++IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ++ALL NECESSARY SERVICING, REPAIR OR CORRECTION. ++ ++ 16. Limitation of Liability. ++ ++ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING ++WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS ++THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY ++GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE ++USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF ++DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD ++PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), ++EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF ++SUCH DAMAGES. ++ ++ 17. Interpretation of Sections 15 and 16. ++ ++ If the disclaimer of warranty and limitation of liability provided ++above cannot be given local legal effect according to their terms, ++reviewing courts shall apply local law that most closely approximates ++an absolute waiver of all civil liability in connection with the ++Program, unless a warranty or assumption of liability accompanies a ++copy of the Program in return for a fee. ++ ++ END OF TERMS AND CONDITIONS ++ ++ How to Apply These Terms to Your New Programs ++ ++ If you develop a new program, and you want it to be of the greatest ++possible use to the public, the best way to achieve this is to make it ++free software which everyone can redistribute and change under these terms. ++ ++ To do so, attach the following notices to the program. It is safest ++to attach them to the start of each source file to most effectively ++state the exclusion of warranty; and each file should have at least ++the "copyright" line and a pointer to where the full notice is found. ++ ++ <one line to give the program's name and a brief idea of what it does.> ++ Copyright (C) <year> <name of author> ++ ++ This program is free software: you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation, either version 3 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program. If not, see <http://www.gnu.org/licenses/>. ++ ++Also add information on how to contact you by electronic and paper mail. ++ ++ If the program does terminal interaction, make it output a short ++notice like this when it starts in an interactive mode: ++ ++ <program> Copyright (C) <year> <name of author> ++ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. ++ This is free software, and you are welcome to redistribute it ++ under certain conditions; type `show c' for details. ++ ++The hypothetical commands `show w' and `show c' should show the appropriate ++parts of the General Public License. Of course, your program's commands ++might be different; for a GUI interface, you would use an "about box". ++ ++ You should also get your employer (if you work as a programmer) or school, ++if any, to sign a "copyright disclaimer" for the program, if necessary. ++For more information on this, and how to apply and follow the GNU GPL, see ++<http://www.gnu.org/licenses/>. ++ ++ The GNU General Public License does not permit incorporating your program ++into proprietary programs. If your program is a subroutine library, you ++may consider it more useful to permit linking proprietary applications with ++the library. If this is what you want to do, use the GNU Lesser General ++Public License instead of this License. But first, please read ++<http://www.gnu.org/philosophy/why-not-lgpl.html>. diff --cc lib/lufa/Bootloaders/HID/HostLoaderApp/hid_bootloader_cli.c index 000000000,000000000..b54f943b1 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/HID/HostLoaderApp/hid_bootloader_cli.c @@@ -1,0 -1,0 +1,1013 @@@ ++/* Modified for the LUFA HID Bootloader by Dean Camera ++ * http://www.lufa-lib.org ++ * ++ * THIS MODIFIED VERSION IS UNSUPPORTED BY PJRC. ++ */ ++ ++/* Teensy Loader, Command Line Interface ++ * Program and Reboot Teensy Board with HalfKay Bootloader ++ * http://www.pjrc.com/teensy/loader_cli.html ++ * Copyright 2008-2010, PJRC.COM, LLC ++ * ++ * ++ * You may redistribute this program and/or modify it under the terms ++ * of the GNU General Public License as published by the Free Software ++ * Foundation, version 3 of the License. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program. If not, see http://www.gnu.org/licenses/ ++ */ ++ ++/* Want to incorporate this code into a proprietary application?? ++ * Just email paul@pjrc.com to ask. Usually it's not a problem, ++ * but you do need to ask to use this code in any way other than ++ * those permitted by the GNU General Public License, version 3 */ ++ ++/* For non-root permissions on ubuntu or similar udev-based linux ++ * http://www.pjrc.com/teensy/49-teensy.rules ++ */ ++ ++#include <stdio.h> ++#include <stdlib.h> ++#include <stdint.h> ++#include <stdarg.h> ++#include <string.h> ++#include <unistd.h> ++ ++void usage(void) ++{ ++ fprintf(stderr, "Usage: hid_bootloader_cli -mmcu=<MCU> [-w] [-h] [-n] [-v] <file.hex>\n"); ++ fprintf(stderr, "\t-w : Wait for device to appear\n"); ++ fprintf(stderr, "\t-r : Use hard reboot if device not online\n"); ++ fprintf(stderr, "\t-n : No reboot after programming\n"); ++ fprintf(stderr, "\t-v : Verbose output\n"); ++ fprintf(stderr, "\n<MCU> = atmegaXXuY or at90usbXXXY"); ++ ++ fprintf(stderr, "\nFor support and more information, please visit:\n"); ++ fprintf(stderr, "http://www.lufa-lib.org\n"); ++ ++ fprintf(stderr, "\nBased on the TeensyHID command line programmer software:\n"); ++ fprintf(stderr, "http://www.pjrc.com/teensy/loader_cli.html\n"); ++ exit(1); ++} ++ ++// USB Access Functions ++int teensy_open(void); ++int teensy_write(void *buf, int len, double timeout); ++void teensy_close(void); ++int hard_reboot(void); ++ ++// Intel Hex File Functions ++int read_intel_hex(const char *filename); ++int ihex_bytes_within_range(int begin, int end); ++void ihex_get_data(int addr, int len, unsigned char *bytes); ++ ++// Misc stuff ++int printf_verbose(const char *format, ...); ++void delay(double seconds); ++void die(const char *str, ...); ++void parse_options(int argc, char **argv); ++ ++// options (from user via command line args) ++int wait_for_device_to_appear = 0; ++int hard_reboot_device = 0; ++int reboot_after_programming = 1; ++int verbose = 0; ++int code_size = 0, block_size = 0; ++const char *filename=NULL; ++ ++ ++/****************************************************************/ ++/* */ ++/* Main Program */ ++/* */ ++/****************************************************************/ ++ ++int main(int argc, char **argv) ++{ ++ unsigned char buf[260]; ++ int num, addr, r, first_block=1, waited=0; ++ ++ // parse command line arguments ++ parse_options(argc, argv); ++ if (!filename) { ++ fprintf(stderr, "Filename must be specified\n\n"); ++ usage(); ++ } ++ if (!code_size) { ++ fprintf(stderr, "MCU type must be specified\n\n"); ++ usage(); ++ } ++ printf_verbose("Teensy Loader, Command Line, Version 2.0\n"); ++ ++ // read the intel hex file ++ // this is done first so any error is reported before using USB ++ num = read_intel_hex(filename); ++ if (num < 0) die("error reading intel hex file \"%s\"", filename); ++ printf_verbose("Read \"%s\": %d bytes, %.1f%% usage\n", ++ filename, num, (double)num / (double)code_size * 100.0); ++ ++ // open the USB device ++ while (1) { ++ if (teensy_open()) break; ++ if (hard_reboot_device) { ++ if (!hard_reboot()) die("Unable to find rebootor\n"); ++ printf_verbose("Hard Reboot performed\n"); ++ hard_reboot_device = 0; // only hard reboot once ++ wait_for_device_to_appear = 1; ++ } ++ if (!wait_for_device_to_appear) die("Unable to open device\n"); ++ if (!waited) { ++ printf_verbose("Waiting for Teensy device...\n"); ++ printf_verbose(" (hint: press the reset button)\n"); ++ waited = 1; ++ } ++ delay(0.25); ++ } ++ printf_verbose("Found HalfKay Bootloader\n"); ++ ++ // if we waited for the device, read the hex file again ++ // perhaps it changed while we were waiting? ++ if (waited) { ++ num = read_intel_hex(filename); ++ if (num < 0) die("error reading intel hex file \"%s\"", filename); ++ printf_verbose("Read \"%s\": %d bytes, %.1f%% usage\n", ++ filename, num, (double)num / (double)code_size * 100.0); ++ } ++ ++ // program the data ++ printf_verbose("Programming"); ++ fflush(stdout); ++ for (addr = 0; addr < code_size; addr += block_size) { ++ if (addr > 0 && !ihex_bytes_within_range(addr, addr + block_size - 1)) { ++ // don't waste time on blocks that are unused, ++ // but always do the first one to erase the chip ++ continue; ++ } ++ printf_verbose("."); ++ if (code_size < 0x10000) { ++ buf[0] = addr & 255; ++ buf[1] = (addr >> 8) & 255; ++ } else { ++ buf[0] = (addr >> 8) & 255; ++ buf[1] = (addr >> 16) & 255; ++ } ++ ihex_get_data(addr, block_size, buf + 2); ++ r = teensy_write(buf, block_size + 2, first_block ? 3.0 : 0.25); ++ if (!r) die("error writing to Teensy\n"); ++ first_block = 0; ++ } ++ printf_verbose("\n"); ++ ++ // reboot to the user's new code ++ if (reboot_after_programming) { ++ printf_verbose("Booting\n"); ++ buf[0] = 0xFF; ++ buf[1] = 0xFF; ++ memset(buf + 2, 0, sizeof(buf) - 2); ++ teensy_write(buf, block_size + 2, 0.25); ++ } ++ teensy_close(); ++ return 0; ++} ++ ++ ++ ++ ++/****************************************************************/ ++/* */ ++/* USB Access - libusb (Linux & FreeBSD) */ ++/* */ ++/****************************************************************/ ++ ++#if defined(USE_LIBUSB) ++ ++// http://libusb.sourceforge.net/doc/index.html ++#include <usb.h> ++ ++usb_dev_handle * open_usb_device(int vid, int pid) ++{ ++ struct usb_bus *bus; ++ struct usb_device *dev; ++ usb_dev_handle *h; ++ #ifdef LIBUSB_HAS_GET_DRIVER_NP ++ char buf[128]; ++ #endif ++ int r; ++ ++ usb_init(); ++ usb_find_busses(); ++ usb_find_devices(); ++ //printf_verbose("\nSearching for USB device:\n"); ++ for (bus = usb_get_busses(); bus; bus = bus->next) { ++ for (dev = bus->devices; dev; dev = dev->next) { ++ //printf_verbose("bus \"%s\", device \"%s\" vid=%04X, pid=%04X\n", ++ // bus->dirname, dev->filename, ++ // dev->descriptor.idVendor, ++ // dev->descriptor.idProduct ++ //); ++ if (dev->descriptor.idVendor != vid) continue; ++ if (dev->descriptor.idProduct != pid) continue; ++ h = usb_open(dev); ++ if (!h) { ++ printf_verbose("Found device but unable to open"); ++ continue; ++ } ++ #ifdef LIBUSB_HAS_GET_DRIVER_NP ++ r = usb_get_driver_np(h, 0, buf, sizeof(buf)); ++ if (r >= 0) { ++ r = usb_detach_kernel_driver_np(h, 0); ++ if (r < 0) { ++ usb_close(h); ++ printf_verbose("Device is in use by \"%s\" driver", buf); ++ continue; ++ } ++ } ++ #endif ++ // Mac OS-X - removing this call to usb_claim_interface() might allow ++ // this to work, even though it is a clear misuse of the libusb API. ++ // normally Apple's IOKit should be used on Mac OS-X ++ r = usb_claim_interface(h, 0); ++ if (r < 0) { ++ usb_close(h); ++ printf_verbose("Unable to claim interface, check USB permissions"); ++ continue; ++ } ++ return h; ++ } ++ } ++ return NULL; ++} ++ ++static usb_dev_handle *libusb_teensy_handle = NULL; ++ ++int teensy_open(void) ++{ ++ teensy_close(); ++ libusb_teensy_handle = open_usb_device(0x16C0, 0x0478); ++ ++ if (!libusb_teensy_handle) ++ libusb_teensy_handle = open_usb_device(0x03eb, 0x2067); ++ ++ if (!libusb_teensy_handle) return 0; ++ return 1; ++} ++ ++int teensy_write(void *buf, int len, double timeout) ++{ ++ int r; ++ ++ if (!libusb_teensy_handle) return 0; ++ r = usb_control_msg(libusb_teensy_handle, 0x21, 9, 0x0200, 0, (char *)buf, ++ len, (int)(timeout * 1000.0)); ++ if (r < 0) return 0; ++ return 1; ++} ++ ++void teensy_close(void) ++{ ++ if (!libusb_teensy_handle) return; ++ usb_release_interface(libusb_teensy_handle, 0); ++ usb_close(libusb_teensy_handle); ++ libusb_teensy_handle = NULL; ++} ++ ++int hard_reboot(void) ++{ ++ usb_dev_handle *rebootor; ++ int r; ++ ++ rebootor = open_usb_device(0x16C0, 0x0477); ++ ++ if (!rebootor) ++ rebootor = open_usb_device(0x03eb, 0x2067); ++ ++ if (!rebootor) return 0; ++ r = usb_control_msg(rebootor, 0x21, 9, 0x0200, 0, "reboot", 6, 100); ++ usb_release_interface(rebootor, 0); ++ usb_close(rebootor); ++ if (r < 0) return 0; ++ return 1; ++} ++ ++#endif ++ ++ ++/****************************************************************/ ++/* */ ++/* USB Access - Microsoft WIN32 */ ++/* */ ++/****************************************************************/ ++ ++#if defined(USE_WIN32) ++ ++// http://msdn.microsoft.com/en-us/library/ms790932.aspx ++#include <windows.h> ++#include <setupapi.h> ++#include <ddk/hidsdi.h> ++#include <ddk/hidclass.h> ++ ++HANDLE open_usb_device(int vid, int pid) ++{ ++ GUID guid; ++ HDEVINFO info; ++ DWORD index, required_size; ++ SP_DEVICE_INTERFACE_DATA iface; ++ SP_DEVICE_INTERFACE_DETAIL_DATA *details; ++ HIDD_ATTRIBUTES attrib; ++ HANDLE h; ++ BOOL ret; ++ ++ HidD_GetHidGuid(&guid); ++ info = SetupDiGetClassDevs(&guid, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); ++ if (info == INVALID_HANDLE_VALUE) return NULL; ++ for (index=0; 1 ;index++) { ++ iface.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA); ++ ret = SetupDiEnumDeviceInterfaces(info, NULL, &guid, index, &iface); ++ if (!ret) { ++ SetupDiDestroyDeviceInfoList(info); ++ break; ++ } ++ SetupDiGetInterfaceDeviceDetail(info, &iface, NULL, 0, &required_size, NULL); ++ details = (SP_DEVICE_INTERFACE_DETAIL_DATA *)malloc(required_size); ++ if (details == NULL) continue; ++ memset(details, 0, required_size); ++ details->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA); ++ ret = SetupDiGetDeviceInterfaceDetail(info, &iface, details, ++ required_size, NULL, NULL); ++ if (!ret) { ++ free(details); ++ continue; ++ } ++ h = CreateFile(details->DevicePath, GENERIC_READ|GENERIC_WRITE, ++ FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, ++ FILE_FLAG_OVERLAPPED, NULL); ++ free(details); ++ if (h == INVALID_HANDLE_VALUE) continue; ++ attrib.Size = sizeof(HIDD_ATTRIBUTES); ++ ret = HidD_GetAttributes(h, &attrib); ++ if (!ret) { ++ CloseHandle(h); ++ continue; ++ } ++ if (attrib.VendorID != vid || attrib.ProductID != pid) { ++ CloseHandle(h); ++ continue; ++ } ++ SetupDiDestroyDeviceInfoList(info); ++ return h; ++ } ++ return NULL; ++} ++ ++int write_usb_device(HANDLE h, void *buf, int len, int timeout) ++{ ++ static HANDLE event = NULL; ++ unsigned char tmpbuf[1040]; ++ OVERLAPPED ov; ++ DWORD n, r; ++ ++ if (len > sizeof(tmpbuf) - 1) return 0; ++ if (event == NULL) { ++ event = CreateEvent(NULL, TRUE, TRUE, NULL); ++ if (!event) return 0; ++ } ++ ResetEvent(&event); ++ memset(&ov, 0, sizeof(ov)); ++ ov.hEvent = event; ++ tmpbuf[0] = 0; ++ memcpy(tmpbuf + 1, buf, len); ++ if (!WriteFile(h, tmpbuf, len + 1, NULL, &ov)) { ++ if (GetLastError() != ERROR_IO_PENDING) return 0; ++ r = WaitForSingleObject(event, timeout); ++ if (r == WAIT_TIMEOUT) { ++ CancelIo(h); ++ return 0; ++ } ++ if (r != WAIT_OBJECT_0) return 0; ++ } ++ if (!GetOverlappedResult(h, &ov, &n, FALSE)) return 0; ++ return 1; ++} ++ ++static HANDLE win32_teensy_handle = NULL; ++ ++int teensy_open(void) ++{ ++ teensy_close(); ++ win32_teensy_handle = open_usb_device(0x16C0, 0x0478); ++ ++ if (!win32_teensy_handle) ++ win32_teensy_handle = open_usb_device(0x03eb, 0x2067); ++ ++ if (!win32_teensy_handle) return 0; ++ return 1; ++} ++ ++int teensy_write(void *buf, int len, double timeout) ++{ ++ int r; ++ if (!win32_teensy_handle) return 0; ++ r = write_usb_device(win32_teensy_handle, buf, len, (int)(timeout * 1000.0)); ++ return r; ++} ++ ++void teensy_close(void) ++{ ++ if (!win32_teensy_handle) return; ++ CloseHandle(win32_teensy_handle); ++ win32_teensy_handle = NULL; ++} ++ ++int hard_reboot(void) ++{ ++ HANDLE rebootor; ++ int r; ++ ++ rebootor = open_usb_device(0x16C0, 0x0477); ++ ++ if (!rebootor) ++ rebootor = open_usb_device(0x03eb, 0x2067); ++ ++ if (!rebootor) return 0; ++ r = write_usb_device(rebootor, "reboot", 6, 100); ++ CloseHandle(rebootor); ++ return r; ++} ++ ++#endif ++ ++ ++ ++/****************************************************************/ ++/* */ ++/* USB Access - Apple's IOKit, Mac OS-X */ ++/* */ ++/****************************************************************/ ++ ++#if defined(USE_APPLE_IOKIT) ++ ++// http://developer.apple.com/technotes/tn2007/tn2187.html ++#include <IOKit/IOKitLib.h> ++#include <IOKit/hid/IOHIDLib.h> ++#include <IOKit/hid/IOHIDDevice.h> ++ ++struct usb_list_struct { ++ IOHIDDeviceRef ref; ++ int pid; ++ int vid; ++ struct usb_list_struct *next; ++}; ++ ++static struct usb_list_struct *usb_list=NULL; ++static IOHIDManagerRef hid_manager=NULL; ++ ++void attach_callback(void *context, IOReturn r, void *hid_mgr, IOHIDDeviceRef dev) ++{ ++ CFTypeRef type; ++ struct usb_list_struct *n, *p; ++ int32_t pid, vid; ++ ++ if (!dev) return; ++ type = IOHIDDeviceGetProperty(dev, CFSTR(kIOHIDVendorIDKey)); ++ if (!type || CFGetTypeID(type) != CFNumberGetTypeID()) return; ++ if (!CFNumberGetValue((CFNumberRef)type, kCFNumberSInt32Type, &vid)) return; ++ type = IOHIDDeviceGetProperty(dev, CFSTR(kIOHIDProductIDKey)); ++ if (!type || CFGetTypeID(type) != CFNumberGetTypeID()) return; ++ if (!CFNumberGetValue((CFNumberRef)type, kCFNumberSInt32Type, &pid)) return; ++ n = (struct usb_list_struct *)malloc(sizeof(struct usb_list_struct)); ++ if (!n) return; ++ //printf("attach callback: vid=%04X, pid=%04X\n", vid, pid); ++ n->ref = dev; ++ n->vid = vid; ++ n->pid = pid; ++ n->next = NULL; ++ if (usb_list == NULL) { ++ usb_list = n; ++ } else { ++ for (p = usb_list; p->next; p = p->next) ; ++ p->next = n; ++ } ++} ++ ++void detach_callback(void *context, IOReturn r, void *hid_mgr, IOHIDDeviceRef dev) ++{ ++ struct usb_list_struct *p, *tmp, *prev=NULL; ++ ++ p = usb_list; ++ while (p) { ++ if (p->ref == dev) { ++ if (prev) { ++ prev->next = p->next; ++ } else { ++ usb_list = p->next; ++ } ++ tmp = p; ++ p = p->next; ++ free(tmp); ++ } else { ++ prev = p; ++ p = p->next; ++ } ++ } ++} ++ ++void init_hid_manager(void) ++{ ++ CFMutableDictionaryRef dict; ++ IOReturn ret; ++ ++ if (hid_manager) return; ++ hid_manager = IOHIDManagerCreate(kCFAllocatorDefault, kIOHIDOptionsTypeNone); ++ if (hid_manager == NULL || CFGetTypeID(hid_manager) != IOHIDManagerGetTypeID()) { ++ if (hid_manager) CFRelease(hid_manager); ++ printf_verbose("no HID Manager - maybe this is a pre-Leopard (10.5) system?\n"); ++ return; ++ } ++ dict = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, ++ &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); ++ if (!dict) return; ++ IOHIDManagerSetDeviceMatching(hid_manager, dict); ++ CFRelease(dict); ++ IOHIDManagerScheduleWithRunLoop(hid_manager, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode); ++ IOHIDManagerRegisterDeviceMatchingCallback(hid_manager, attach_callback, NULL); ++ IOHIDManagerRegisterDeviceRemovalCallback(hid_manager, detach_callback, NULL); ++ ret = IOHIDManagerOpen(hid_manager, kIOHIDOptionsTypeNone); ++ if (ret != kIOReturnSuccess) { ++ IOHIDManagerUnscheduleFromRunLoop(hid_manager, ++ CFRunLoopGetCurrent(), kCFRunLoopDefaultMode); ++ CFRelease(hid_manager); ++ printf_verbose("Error opening HID Manager"); ++ } ++} ++ ++static void do_run_loop(void) ++{ ++ while (CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, true) == kCFRunLoopRunHandledSource) ; ++} ++ ++IOHIDDeviceRef open_usb_device(int vid, int pid) ++{ ++ struct usb_list_struct *p; ++ IOReturn ret; ++ ++ init_hid_manager(); ++ do_run_loop(); ++ for (p = usb_list; p; p = p->next) { ++ if (p->vid == vid && p->pid == pid) { ++ ret = IOHIDDeviceOpen(p->ref, kIOHIDOptionsTypeNone); ++ if (ret == kIOReturnSuccess) return p->ref; ++ } ++ } ++ return NULL; ++} ++ ++void close_usb_device(IOHIDDeviceRef dev) ++{ ++ struct usb_list_struct *p; ++ ++ do_run_loop(); ++ for (p = usb_list; p; p = p->next) { ++ if (p->ref == dev) { ++ IOHIDDeviceClose(dev, kIOHIDOptionsTypeNone); ++ return; ++ } ++ } ++} ++ ++static IOHIDDeviceRef iokit_teensy_reference = NULL; ++ ++int teensy_open(void) ++{ ++ teensy_close(); ++ iokit_teensy_reference = open_usb_device(0x16C0, 0x0478); ++ ++ if (!iokit_teensy_reference) ++ iokit_teensy_reference = open_usb_device(0x03eb, 0x2067); ++ ++ if (!iokit_teensy_reference) return 0; ++ return 1; ++} ++ ++int teensy_write(void *buf, int len, double timeout) ++{ ++ IOReturn ret; ++ ++ // timeouts do not work on OS-X ++ // IOHIDDeviceSetReportWithCallback is not implemented ++ // even though Apple documents it with a code example! ++ // submitted to Apple on 22-sep-2009, problem ID 7245050 ++ if (!iokit_teensy_reference) return 0; ++ ret = IOHIDDeviceSetReport(iokit_teensy_reference, ++ kIOHIDReportTypeOutput, 0, buf, len); ++ if (ret == kIOReturnSuccess) return 1; ++ return 0; ++} ++ ++void teensy_close(void) ++{ ++ if (!iokit_teensy_reference) return; ++ close_usb_device(iokit_teensy_reference); ++ iokit_teensy_reference = NULL; ++} ++ ++int hard_reboot(void) ++{ ++ IOHIDDeviceRef rebootor; ++ IOReturn ret; ++ ++ rebootor = open_usb_device(0x16C0, 0x0477); ++ ++ if (!rebootor) ++ rebootor = open_usb_device(0x03eb, 0x2067); ++ ++ if (!rebootor) return 0; ++ ret = IOHIDDeviceSetReport(rebootor, ++ kIOHIDReportTypeOutput, 0, (uint8_t *)("reboot"), 6); ++ close_usb_device(rebootor); ++ if (ret == kIOReturnSuccess) return 1; ++ return 0; ++} ++ ++#endif ++ ++ ++ ++/****************************************************************/ ++/* */ ++/* USB Access - BSD's UHID driver */ ++/* */ ++/****************************************************************/ ++ ++#if defined(USE_UHID) ++ ++// Thanks to Todd T Fries for help getting this working on OpenBSD ++// and to Chris Kuethe for the initial patch to use UHID. ++ ++#include <sys/ioctl.h> ++#include <fcntl.h> ++#include <dirent.h> ++#include <dev/usb/usb.h> ++#ifndef USB_GET_DEVICEINFO ++#include <dev/usb/usb_ioctl.h> ++#endif ++ ++#ifndef USB_GET_DEVICEINFO ++# define USB_GET_DEVICEINFO 0 ++# error The USB_GET_DEVICEINFO ioctl() value is not defined for your system. ++#endif ++ ++int open_usb_device(int vid, int pid) ++{ ++ int r, fd; ++ DIR *dir; ++ struct dirent *d; ++ struct usb_device_info info; ++ char buf[256]; ++ ++ dir = opendir("/dev"); ++ if (!dir) return -1; ++ while ((d = readdir(dir)) != NULL) { ++ if (strncmp(d->d_name, "uhid", 4) != 0) continue; ++ snprintf(buf, sizeof(buf), "/dev/%s", d->d_name); ++ fd = open(buf, O_RDWR); ++ if (fd < 0) continue; ++ r = ioctl(fd, USB_GET_DEVICEINFO, &info); ++ if (r < 0) { ++ // NetBSD: added in 2004 ++ // OpenBSD: added November 23, 2009 ++ // FreeBSD: missing (FreeBSD 8.0) - USE_LIBUSB works! ++ die("Error: your uhid driver does not support" ++ " USB_GET_DEVICEINFO, please upgrade!\n"); ++ close(fd); ++ closedir(dir); ++ exit(1); ++ } ++ //printf("%s: v=%d, p=%d\n", buf, info.udi_vendorNo, info.udi_productNo); ++ if (info.udi_vendorNo == vid && info.udi_productNo == pid) { ++ closedir(dir); ++ return fd; ++ } ++ close(fd); ++ } ++ closedir(dir); ++ return -1; ++} ++ ++static int uhid_teensy_fd = -1; ++ ++int teensy_open(void) ++{ ++ teensy_close(); ++ uhid_teensy_fd = open_usb_device(0x16C0, 0x0478); ++ ++ if (uhid_teensy_fd < 0) ++ uhid_teensy_fd = open_usb_device(0x03eb, 0x2067); ++ ++ if (uhid_teensy_fd < 0) return 0; ++ return 1; ++} ++ ++int teensy_write(void *buf, int len, double timeout) ++{ ++ int r; ++ ++ // TODO: implement timeout... how?? ++ r = write(uhid_teensy_fd, buf, len); ++ if (r == len) return 1; ++ return 0; ++} ++ ++void teensy_close(void) ++{ ++ if (uhid_teensy_fd >= 0) { ++ close(uhid_teensy_fd); ++ uhid_teensy_fd = -1; ++ } ++} ++ ++int hard_reboot(void) ++{ ++ int r, rebootor_fd; ++ ++ rebootor_fd = open_usb_device(0x16C0, 0x0477); ++ ++ if (rebootor_fd < 0) ++ rebootor_fd = open_usb_device(0x03eb, 0x2067); ++ ++ if (rebootor_fd < 0) return 0; ++ r = write(rebootor_fd, "reboot", 6); ++ delay(0.1); ++ close(rebootor_fd); ++ if (r == 6) return 1; ++ return 0; ++} ++ ++#endif ++ ++ ++ ++/****************************************************************/ ++/* */ ++/* Read Intel Hex File */ ++/* */ ++/****************************************************************/ ++ ++// the maximum flash image size we can support ++// chips with larger memory may be used, but only this ++// much intel-hex data can be loaded into memory! ++#define MAX_MEMORY_SIZE 0x10000 ++ ++static unsigned char firmware_image[MAX_MEMORY_SIZE]; ++static unsigned char firmware_mask[MAX_MEMORY_SIZE]; ++static int end_record_seen=0; ++static int byte_count; ++static unsigned int extended_addr = 0; ++static int parse_hex_line(char *line); ++ ++int read_intel_hex(const char *filename) ++{ ++ FILE *fp; ++ int i, lineno=0; ++ char buf[1024]; ++ ++ byte_count = 0; ++ end_record_seen = 0; ++ for (i=0; i<MAX_MEMORY_SIZE; i++) { ++ firmware_image[i] = 0xFF; ++ firmware_mask[i] = 0; ++ } ++ extended_addr = 0; ++ ++ fp = fopen(filename, "r"); ++ if (fp == NULL) { ++ //printf("Unable to read file %s\n", filename); ++ return -1; ++ } ++ while (!feof(fp)) { ++ *buf = '\0'; ++ if (!fgets(buf, sizeof(buf), fp)) break; ++ lineno++; ++ if (*buf) { ++ if (parse_hex_line(buf) == 0) { ++ //printf("Warning, parse error line %d\n", lineno); ++ fclose(fp); ++ return -2; ++ } ++ } ++ if (end_record_seen) break; ++ if (feof(stdin)) break; ++ } ++ fclose(fp); ++ return byte_count; ++} ++ ++ ++/* from ihex.c, at http://www.pjrc.com/tech/8051/pm2_docs/intel-hex.html */ ++ ++/* parses a line of intel hex code, stores the data in bytes[] */ ++/* and the beginning address in addr, and returns a 1 if the */ ++/* line was valid, or a 0 if an error occurred. The variable */ ++/* num gets the number of bytes that were stored into bytes[] */ ++ ++ ++int ++parse_hex_line(char *line) ++{ ++ int addr, code, num; ++ int sum, len, cksum, i; ++ char *ptr; ++ ++ num = 0; ++ if (line[0] != ':') return 0; ++ if (strlen(line) < 11) return 0; ++ ptr = line+1; ++ if (!sscanf(ptr, "%02x", &len)) return 0; ++ ptr += 2; ++ if ((int)strlen(line) < (11 + (len * 2)) ) return 0; ++ if (!sscanf(ptr, "%04x", &addr)) return 0; ++ ptr += 4; ++ /* printf("Line: length=%d Addr=%d\n", len, addr); */ ++ if (!sscanf(ptr, "%02x", &code)) return 0; ++ if (addr + extended_addr + len >= MAX_MEMORY_SIZE) return 0; ++ ptr += 2; ++ sum = (len & 255) + ((addr >> 8) & 255) + (addr & 255) + (code & 255); ++ if (code != 0) { ++ if (code == 1) { ++ end_record_seen = 1; ++ return 1; ++ } ++ if (code == 2 && len == 2) { ++ if (!sscanf(ptr, "%04x", &i)) return 1; ++ ptr += 4; ++ sum += ((i >> 8) & 255) + (i & 255); ++ if (!sscanf(ptr, "%02x", &cksum)) return 1; ++ if (((sum & 255) + (cksum & 255)) & 255) return 1; ++ extended_addr = i << 4; ++ //printf("ext addr = %05X\n", extended_addr); ++ } ++ if (code == 4 && len == 2) { ++ if (!sscanf(ptr, "%04x", &i)) return 1; ++ ptr += 4; ++ sum += ((i >> 8) & 255) + (i & 255); ++ if (!sscanf(ptr, "%02x", &cksum)) return 1; ++ if (((sum & 255) + (cksum & 255)) & 255) return 1; ++ extended_addr = i << 16; ++ //printf("ext addr = %08X\n", extended_addr); ++ } ++ return 1; // non-data line ++ } ++ byte_count += len; ++ while (num != len) { ++ if (sscanf(ptr, "%02x", &i) != 1) return 0; ++ i &= 255; ++ firmware_image[addr + extended_addr + num] = i; ++ firmware_mask[addr + extended_addr + num] = 1; ++ ptr += 2; ++ sum += i; ++ (num)++; ++ if (num >= 256) return 0; ++ } ++ if (!sscanf(ptr, "%02x", &cksum)) return 0; ++ if (((sum & 255) + (cksum & 255)) & 255) return 0; /* checksum error */ ++ return 1; ++} ++ ++int ihex_bytes_within_range(int begin, int end) ++{ ++ int i; ++ ++ if (begin < 0 || begin >= MAX_MEMORY_SIZE || ++ end < 0 || end >= MAX_MEMORY_SIZE) { ++ return 0; ++ } ++ for (i=begin; i<=end; i++) { ++ if (firmware_mask[i]) return 1; ++ } ++ return 0; ++} ++ ++void ihex_get_data(int addr, int len, unsigned char *bytes) ++{ ++ int i; ++ ++ if (addr < 0 || len < 0 || addr + len >= MAX_MEMORY_SIZE) { ++ for (i=0; i<len; i++) { ++ bytes[i] = 255; ++ } ++ return; ++ } ++ for (i=0; i<len; i++) { ++ if (firmware_mask[addr]) { ++ bytes[i] = firmware_image[addr]; ++ } else { ++ bytes[i] = 255; ++ } ++ addr++; ++ } ++} ++ ++/****************************************************************/ ++/* */ ++/* Misc Functions */ ++/* */ ++/****************************************************************/ ++ ++int printf_verbose(const char *format, ...) ++{ ++ va_list ap; ++ int r = 0; ++ ++ va_start(ap, format); ++ if (verbose) { ++ r = vprintf(format, ap); ++ fflush(stdout); ++ } ++ va_end(ap); ++ ++ return r; ++} ++ ++void delay(double seconds) ++{ ++ #ifdef USE_WIN32 ++ sleep(seconds * 1000.0); ++ #else ++ usleep(seconds * 1000000.0); ++ #endif ++} ++ ++void die(const char *str, ...) ++{ ++ va_list ap; ++ ++ va_start(ap, str); ++ vfprintf(stderr, str, ap); ++ fprintf(stderr, "\n"); ++ va_end(ap); ++ ++ exit(1); ++} ++ ++#if defined USE_WIN32 ++#define strcasecmp stricmp ++#endif ++ ++void parse_options(int argc, char **argv) ++{ ++ int i; ++ const char *arg; ++ ++ for (i=1; i<argc; i++) { ++ arg = argv[i]; ++ ++ if (*arg == '-') { ++ if (strcmp(arg, "-w") == 0) { ++ wait_for_device_to_appear = 1; ++ } else if (strcmp(arg, "-r") == 0) { ++ hard_reboot_device = 1; ++ } else if (strcmp(arg, "-n") == 0) { ++ reboot_after_programming = 0; ++ } else if (strcmp(arg, "-v") == 0) { ++ verbose = 1; ++ } else if (strncmp(arg, "-mmcu=", 6) == 0) { ++ arg += 6; ++ ++ if (strncmp(arg, "at90usb", 7) == 0) { ++ arg += 7; ++ } else if (strncmp(arg, "atmega", 6) == 0) { ++ arg += 6; ++ } else { ++ die("Unknown MCU type\n"); ++ } ++ ++ if (strncmp(arg, "128", 3) == 0) { ++ code_size = 128 * 1024; ++ block_size = 256; ++ } else if (strncmp(arg, "64", 2) == 0) { ++ code_size = 64 * 1024; ++ block_size = 256; ++ } else if (strncmp(arg, "32", 2) == 0) { ++ code_size = 32 * 1024; ++ block_size = 128; ++ } else if (strncmp(arg, "16", 2) == 0) { ++ code_size = 16 * 1024; ++ block_size = 128; ++ } else if (strncmp(arg, "8", 1) == 0) { ++ code_size = 8 * 1024; ++ block_size = 128; ++ } else { ++ die("Unknown MCU type\n"); ++ } ++ } ++ } else { ++ filename = argv[i]; ++ } ++ } ++} ++ diff --cc lib/lufa/Bootloaders/HID/HostLoaderApp_Python/hid_bootloader_loader.py index 000000000,000000000..cb824f582 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/HID/HostLoaderApp_Python/hid_bootloader_loader.py @@@ -1,0 -1,0 +1,120 @@@ ++""" ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++""" ++ ++""" ++ Front-end programmer for the LUFA HID class bootloader. ++ ++ Usage: ++ python hid_bootloader_loader.py <Device> <Input>.hex ++ ++ Example: ++ python hid_bootloader_loader.py at90usb1287 Mouse.hex ++ ++ Requires the pywinusb (https://pypi.python.org/pypi/pywinusb/) and ++ IntelHex (https://pypi.python.org/pypi/IntelHex/) libraries. ++""" ++ ++import sys ++from pywinusb import hid ++from intelhex import IntelHex ++ ++ ++# Device information table ++device_info_map = dict() ++device_info_map['at90usb1287'] = {'page_size': 256, 'flash_kb': 128} ++device_info_map['at90usb1286'] = {'page_size': 256, 'flash_kb': 128} ++device_info_map['at90usb647'] = {'page_size': 256, 'flash_kb': 64} ++device_info_map['at90usb646'] = {'page_size': 256, 'flash_kb': 64} ++device_info_map['atmega32u4'] = {'page_size': 128, 'flash_kb': 32} ++device_info_map['atmega32u2'] = {'page_size': 128, 'flash_kb': 32} ++device_info_map['atmega16u4'] = {'page_size': 128, 'flash_kb': 16} ++device_info_map['atmega16u2'] = {'page_size': 128, 'flash_kb': 16} ++device_info_map['at90usb162'] = {'page_size': 128, 'flash_kb': 16} ++device_info_map['atmega8u2'] = {'page_size': 128, 'flash_kb': 8} ++device_info_map['at90usb82'] = {'page_size': 128, 'flash_kb': 8} ++ ++ ++def get_hid_device_handle(): ++ hid_device_filter = hid.HidDeviceFilter(vendor_id=0x03EB, ++ product_id=0x2067) ++ ++ valid_hid_devices = hid_device_filter.get_devices() ++ ++ if len(valid_hid_devices) is 0: ++ return None ++ else: ++ return valid_hid_devices[0] ++ ++ ++def send_page_data(hid_device, address, data): ++ # Bootloader page data should be the HID Report ID (always zero) followed ++ # by the starting address to program, then one device's flash page worth ++ # of data ++ output_report_data = [0] ++ output_report_data.extend([address & 0xFF, address >> 8]) ++ output_report_data.extend(data) ++ ++ hid_device.send_output_report(output_report_data) ++ ++ ++def program_device(hex_data, device_info): ++ hid_device = get_hid_device_handle() ++ ++ if hid_device is None: ++ print("No valid HID device found.") ++ sys.exit(1) ++ ++ try: ++ hid_device.open() ++ print("Connected to bootloader.") ++ ++ # Program in all data from the loaded HEX file, in a number of device ++ # page sized chunks ++ for addr in range(0, hex_data.maxaddr(), device_info['page_size']): ++ # Compute the address range of the current page in the device ++ current_page_range = range(addr, addr+device_info['page_size']) ++ ++ # Extract the data from the hex file at the specified start page ++ # address and convert it to a regular list of bytes ++ page_data = [hex_data[i] for i in current_page_range] ++ ++ print("Writing address 0x%04X-0x%04X" % (current_page_range[0], current_page_range[-1])) ++ ++ # Devices with more than 64KB of flash should shift down the page ++ # address so that it is 16-bit (page size is guaranteed to be ++ # >= 256 bytes so no non-zero address bits are discarded) ++ if device_info['flash_kb'] < 64: ++ send_page_data(hid_device, addr, page_data) ++ else: ++ send_page_data(hid_device, addr >> 8, page_data) ++ ++ # Once programming is complete, start the application via a dummy page ++ # program to the page address 0xFFFF ++ print("Programming complete, starting application.") ++ send_page_data(hid_device, 0xFFFF, [0] * device_info['page_size']) ++ ++ finally: ++ hid_device.close() ++ ++ ++if __name__ == '__main__': ++ # Load the specified HEX file ++ try: ++ hex_data = IntelHex(sys.argv[2]) ++ except: ++ print("Could not open the specified HEX file.") ++ sys.exit(1) ++ ++ # Retrieve the device information entry for the specified device ++ try: ++ device_info = device_info_map[sys.argv[1]] ++ except: ++ print("Unknown device name specified.") ++ sys.exit(1) ++ ++ program_device(hex_data, device_info) diff --cc lib/lufa/Bootloaders/HID/asf.xml index 000000000,000000000..9394b1353 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/HID/asf.xml @@@ -1,0 -1,0 +1,123 @@@ ++<asf xmlversion="1.0"> ++ <project caption="HID Bootloader - 128KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.128_4" force-caption="true" workspace-name="lufa_hid_128kb_4kb_"> ++ <require idref="lufa.bootloaders.hid"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <config name="config.compiler.optimization.level" value="size"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ ++ <build type="define" name="BOOT_START_ADDR" value="0x1F000"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.text=0x1F000"/> ++ </project> ++ ++ <project caption="HID Bootloader - 64KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.64_4" force-caption="true" workspace-name="lufa_hid_64kb_4kb_"> ++ <require idref="lufa.bootloaders.hid"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb647"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <config name="config.compiler.optimization.level" value="size"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ ++ <build type="define" name="BOOT_START_ADDR" value="0xF000"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.text=0xF000"/> ++ </project> ++ ++ <project caption="HID Bootloader - 32KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.32_4" force-caption="true" workspace-name="lufa_hid_32kb_4kb_"> ++ <require idref="lufa.bootloaders.hid"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atmega32u4"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <config name="config.compiler.optimization.level" value="size"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ ++ <build type="define" name="BOOT_START_ADDR" value="0x7000"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/> ++ </project> ++ ++ <project caption="HID Bootloader - 16KB FLASH / 2KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.16_2" force-caption="true" workspace-name="lufa_hid_16kb_2kb_"> ++ <require idref="lufa.bootloaders.hid"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atmega16u2"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <config name="config.compiler.optimization.level" value="size"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ ++ <build type="define" name="BOOT_START_ADDR" value="0x3800"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.text=0x3800"/> ++ </project> ++ ++ <project caption="HID Bootloader - 8KB FLASH / 2KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.8_2" force-caption="true" workspace-name="lufa_hid_8kb_2kb_"> ++ <require idref="lufa.bootloaders.hid"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atmega8u2"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <config name="config.compiler.optimization.level" value="size"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ ++ <build type="define" name="BOOT_START_ADDR" value="0x1800"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.text=0x1800"/> ++ </project> ++ ++ <module type="application" id="lufa.bootloaders.hid" caption="HID Bootloader"> ++ <info type="description" value="summary"> ++ HID Class Bootloader, capable of reprogramming a device via a custom cross-platform command line utility when plugged into a host. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Bootloaders"/> ++ <keyword value="USB Device"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="include-path" value="."/> ++ <build type="c-source" value="BootloaderHID.c"/> ++ <build type="header-file" value="BootloaderHID.h"/> ++ <build type="c-source" value="Descriptors.c"/> ++ <build type="header-file" value="Descriptors.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="BootloaderHID.txt"/> ++ <build type="distribute" subtype="directory" value="HostLoaderApp"/> ++ <build type="distribute" subtype="directory" value="HostLoaderApp_Python"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ </module> ++</asf> diff --cc lib/lufa/Bootloaders/HID/doxyfile index 000000000,000000000..4c3de5ab9 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/HID/doxyfile @@@ -1,0 -1,0 +1,2398 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - HID Class Bootloader" ++ ++# The PROJECT_NUMBER tag can be used to enter a project or revision number. This ++# could be handy for archiving the generated documentation or if some version ++# control system is used. ++ ++PROJECT_NUMBER = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ \ ++ HostLoaderApp/ \ ++ HostLoaderApp_Python/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM \ ++ ATTR_NO_INIT ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Bootloaders/HID/makefile index 000000000,000000000..12cfadb5d new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/HID/makefile @@@ -1,0 -1,0 +1,55 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = BootloaderHID ++SRC = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) ++LUFA_PATH = ../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -DBOOT_START_ADDR=$(BOOT_START_OFFSET) -IConfig/ ++LD_FLAGS = -Wl,--section-start=.text=$(BOOT_START_OFFSET) ++ ++# Flash size and bootloader section sizes of the target, in KB. These must ++# match the target's total FLASH size and the bootloader size set in the ++# device's fuses. ++FLASH_SIZE_KB := 128 ++BOOT_SECTION_SIZE_KB := 8 ++ ++# Bootloader address calculation formulas ++# Do not modify these macros, but rather modify the dependent values above. ++CALC_ADDRESS_IN_HEX = $(shell printf "0x%X" $$(( $(1) )) ) ++BOOT_START_OFFSET = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024 ) ++BOOT_SEC_OFFSET = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) * 1024) - ($(strip $(1))) ) ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Bootloaders/MassStorage/BootloaderAPI.c index 000000000,000000000..491c506d0 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/MassStorage/BootloaderAPI.c @@@ -1,0 -1,0 +1,76 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * Bootloader user application API functions. ++ */ ++ ++#include "BootloaderAPI.h" ++ ++void BootloaderAPI_ErasePage(const uint32_t Address) ++{ ++ boot_page_erase_safe(Address); ++ boot_spm_busy_wait(); ++ boot_rww_enable(); ++} ++ ++void BootloaderAPI_WritePage(const uint32_t Address) ++{ ++ boot_page_write_safe(Address); ++ boot_spm_busy_wait(); ++ boot_rww_enable(); ++} ++ ++void BootloaderAPI_FillWord(const uint32_t Address, const uint16_t Word) ++{ ++ boot_page_fill_safe(Address, Word); ++} ++ ++uint8_t BootloaderAPI_ReadSignature(const uint16_t Address) ++{ ++ return boot_signature_byte_get(Address); ++} ++ ++uint8_t BootloaderAPI_ReadFuse(const uint16_t Address) ++{ ++ return boot_lock_fuse_bits_get(Address); ++} ++ ++uint8_t BootloaderAPI_ReadLock(void) ++{ ++ return boot_lock_fuse_bits_get(GET_LOCK_BITS); ++} ++ ++void BootloaderAPI_WriteLock(const uint8_t LockBits) ++{ ++ boot_lock_bits_set_safe(LockBits); ++} ++ diff --cc lib/lufa/Bootloaders/MassStorage/BootloaderAPI.h index 000000000,000000000..4889b4c0d new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/MassStorage/BootloaderAPI.h @@@ -1,0 -1,0 +1,63 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 BootloaderAPI.c. ++ */ ++ ++#ifndef _BOOTLOADER_API_H_ ++#define _BOOTLOADER_API_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/boot.h> ++ #include <stdbool.h> ++ ++ #include <LUFA/Common/Common.h> ++ ++ /* Macros: */ ++ #if AUX_BOOT_SECTION_SIZE > 0 ++ #define AUX_BOOT_SECTION __attribute__((section(".boot_aux"))) ++ #else ++ #define AUX_BOOT_SECTION ++ #endif ++ ++ /* Function Prototypes: */ ++ void BootloaderAPI_ErasePage(const uint32_t Address); ++ void BootloaderAPI_WritePage(const uint32_t Address); ++ void BootloaderAPI_FillWord(const uint32_t Address, const uint16_t Word); ++ uint8_t BootloaderAPI_ReadSignature(const uint16_t Address); ++ uint8_t BootloaderAPI_ReadFuse(const uint16_t Address); ++ uint8_t BootloaderAPI_ReadLock(void); ++ void BootloaderAPI_WriteLock(const uint8_t LockBits); ++ ++#endif ++ diff --cc lib/lufa/Bootloaders/MassStorage/BootloaderAPITable.S index 000000000,000000000..30165700d new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/MassStorage/BootloaderAPITable.S @@@ -1,0 -1,0 +1,102 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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. ++*/ ++ ++#if AUX_BOOT_SECTION_SIZE > 0 ++#warning Using a AUX bootloader section in addition to the defined bootloader space (see documentation). ++ ++; Trampoline to jump over the AUX bootloader section to the start of the bootloader, ++; on devices where an AUX bootloader section is used. ++.section .boot_aux_trampoline, "ax" ++.global Boot_AUX_Trampoline ++Boot_AUX_Trampoline: ++ jmp BOOT_START_ADDR ++#endif ++ ++; Trampolines to actual API implementations if the target address is outside the ++; range of a rjmp instruction (can happen with large bootloader sections) ++.section .apitable_trampolines, "ax" ++.global BootloaderAPI_Trampolines ++BootloaderAPI_Trampolines: ++ ++ BootloaderAPI_ErasePage_Trampoline: ++ jmp BootloaderAPI_ErasePage ++ BootloaderAPI_WritePage_Trampoline: ++ jmp BootloaderAPI_WritePage ++ BootloaderAPI_FillWord_Trampoline: ++ jmp BootloaderAPI_FillWord ++ BootloaderAPI_ReadSignature_Trampoline: ++ jmp BootloaderAPI_ReadSignature ++ BootloaderAPI_ReadFuse_Trampoline: ++ jmp BootloaderAPI_ReadFuse ++ BootloaderAPI_ReadLock_Trampoline: ++ jmp BootloaderAPI_ReadLock ++ BootloaderAPI_WriteLock_Trampoline: ++ jmp BootloaderAPI_WriteLock ++ BootloaderAPI_UNUSED1: ++ ret ++ BootloaderAPI_UNUSED2: ++ ret ++ BootloaderAPI_UNUSED3: ++ ret ++ BootloaderAPI_UNUSED4: ++ ret ++ BootloaderAPI_UNUSED5: ++ ret ++ ++ ++ ++; API function jump table ++.section .apitable_jumptable, "ax" ++.global BootloaderAPI_JumpTable ++BootloaderAPI_JumpTable: ++ ++ rjmp BootloaderAPI_ErasePage_Trampoline ++ rjmp BootloaderAPI_WritePage_Trampoline ++ rjmp BootloaderAPI_FillWord_Trampoline ++ rjmp BootloaderAPI_ReadSignature_Trampoline ++ rjmp BootloaderAPI_ReadFuse_Trampoline ++ rjmp BootloaderAPI_ReadLock_Trampoline ++ rjmp BootloaderAPI_WriteLock_Trampoline ++ rjmp BootloaderAPI_UNUSED1 ; UNUSED ENTRY 1 ++ rjmp BootloaderAPI_UNUSED2 ; UNUSED ENTRY 2 ++ rjmp BootloaderAPI_UNUSED3 ; UNUSED ENTRY 3 ++ rjmp BootloaderAPI_UNUSED4 ; UNUSED ENTRY 4 ++ rjmp BootloaderAPI_UNUSED5 ; UNUSED ENTRY 5 ++ ++ ++ ++; Bootloader table signatures and information ++.section .apitable_signatures, "ax" ++.global BootloaderAPI_Signatures ++BootloaderAPI_Signatures: ++ ++ .long BOOT_START_ADDR ; Start address of the bootloader ++ .word 0xDF30 ; Signature for the MS class bootloader, V1 ++ .word 0xDCFB ; Signature for a LUFA class bootloader diff --cc lib/lufa/Bootloaders/MassStorage/BootloaderMassStorage.c index 000000000,000000000..6c9697b66 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/MassStorage/BootloaderMassStorage.c @@@ -1,0 -1,0 +1,263 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 Mass Storage class bootloader. This file contains the complete bootloader logic. ++ */ ++ ++#define INCLUDE_FROM_BOOTLOADER_MASSSTORAGE_C ++#include "BootloaderMassStorage.h" ++ ++/** LUFA Mass Storage Class driver interface configuration and state information. This structure is ++ * passed to all Mass Storage Class driver functions, so that multiple instances of the same class ++ * within a device can be differentiated from one another. ++ */ ++USB_ClassInfo_MS_Device_t Disk_MS_Interface = ++ { ++ .Config = ++ { ++ .InterfaceNumber = INTERFACE_ID_MassStorage, ++ .DataINEndpoint = ++ { ++ .Address = MASS_STORAGE_IN_EPADDR, ++ .Size = MASS_STORAGE_IO_EPSIZE, ++ .Banks = 1, ++ }, ++ .DataOUTEndpoint = ++ { ++ .Address = MASS_STORAGE_OUT_EPADDR, ++ .Size = MASS_STORAGE_IO_EPSIZE, ++ .Banks = 1, ++ }, ++ .TotalLUNs = 1, ++ }, ++ }; ++ ++/** Flag to indicate if the bootloader should be running, or should exit and allow the application code to run ++ * via a soft reset. When cleared, the bootloader will abort, the USB interface will shut down and the application ++ * started via a forced watchdog reset. ++ */ ++bool RunBootloader = true; ++ ++/** Magic lock for forced application start. If the HWBE fuse is programmed and BOOTRST is unprogrammed, the bootloader ++ * will start if the /HWB line of the AVR is held low and the system is reset. However, if the /HWB line is still held ++ * low when the application attempts to start via a watchdog reset, the bootloader will re-start. If set to the value ++ * \ref MAGIC_BOOT_KEY the special init function \ref Application_Jump_Check() will force the application to start. ++ */ ++uint16_t MagicBootKey ATTR_NO_INIT; ++ ++/** Indicates if the bootloader is allowed to exit immediately if \ref RunBootloader is \c false. During shutdown all ++ * pending commands must be processed before jumping to the user-application, thus this tracks the main program loop ++ * iterations since a SCSI command from the host was received. ++ */ ++static uint8_t TicksSinceLastCommand = 0; ++ ++ ++/** Special startup routine to check if the bootloader was started via a watchdog reset, and if the magic application ++ * start key has been loaded into \ref MagicBootKey. If the bootloader started via the watchdog and the key is valid, ++ * this will force the user application to start via a software jump. ++ */ ++void Application_Jump_Check(void) ++{ ++ bool JumpToApplication = false; ++ ++ #if (BOARD == BOARD_LEONARDO) ++ /* Enable pull-up on the IO13 pin so we can use it to select the mode */ ++ PORTC |= (1 << 7); ++ Delay_MS(10); ++ ++ /* If IO13 is not jumpered to ground, start the user application instead */ ++ JumpToApplication = ((PINC & (1 << 7)) != 0); ++ ++ /* Disable pull-up after the check has completed */ ++ PORTC &= ~(1 << 7); ++ #elif ((BOARD == BOARD_XPLAIN) || (BOARD == BOARD_XPLAIN_REV1)) ++ /* Disable JTAG debugging */ ++ JTAG_DISABLE(); ++ ++ /* Enable pull-up on the JTAG TCK pin so we can use it to select the mode */ ++ PORTF |= (1 << 4); ++ Delay_MS(10); ++ ++ /* If the TCK pin is not jumpered to ground, start the user application instead */ ++ JumpToApplication = ((PINF & (1 << 4)) != 0); ++ ++ /* Re-enable JTAG debugging */ ++ JTAG_ENABLE(); ++ #else ++ /* Check if the device's BOOTRST fuse is set */ ++ if (boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS) & FUSE_BOOTRST) ++ { ++ /* If the reset source was not an external reset or the key is correct, clear it and jump to the application */ ++ if (!(MCUSR & (1 << EXTRF)) || (MagicBootKey == MAGIC_BOOT_KEY)) ++ JumpToApplication = true; ++ ++ /* Clear reset source */ ++ MCUSR &= ~(1 << EXTRF); ++ } ++ else ++ { ++ /* If the reset source was the bootloader and the key is correct, clear it and jump to the application; ++ * this can happen in the HWBE fuse is set, and the HBE pin is low during the watchdog reset */ ++ if ((MCUSR & (1 << WDRF)) && (MagicBootKey == MAGIC_BOOT_KEY)) ++ JumpToApplication = true; ++ ++ /* Clear reset source */ ++ MCUSR &= ~(1 << WDRF); ++ } ++ #endif ++ ++ /* Don't run the user application if the reset vector is blank (no app loaded) */ ++ bool ApplicationValid = (pgm_read_word_near(0) != 0xFFFF); ++ ++ /* If a request has been made to jump to the user application, honor it */ ++ if (JumpToApplication && ApplicationValid) ++ { ++ /* Turn off the watchdog */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Clear the boot key and jump to the user application */ ++ MagicBootKey = 0; ++ ++ // cppcheck-suppress constStatement ++ ((void (*)(void))0x0000)(); ++ } ++} ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ while (RunBootloader || TicksSinceLastCommand++ < 0xFF) ++ { ++ MS_Device_USBTask(&Disk_MS_Interface); ++ USB_USBTask(); ++ } ++ ++ /* Disconnect from the host - USB interface will be reset later along with the AVR */ ++ USB_Detach(); ++ ++ /* Unlock the forced application start mode of the bootloader if it is restarted */ ++ MagicBootKey = MAGIC_BOOT_KEY; ++ ++ /* Enable the watchdog and force a timeout to reset the AVR */ ++ wdt_enable(WDTO_250MS); ++ ++ for (;;); ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++static void SetupHardware(void) ++{ ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++ ++ /* Relocate the interrupt vector table to the bootloader section */ ++ MCUCR = (1 << IVCE); ++ MCUCR = (1 << IVSEL); ++ ++ /* Hardware Initialization */ ++ LEDs_Init(); ++ USB_Init(); ++ ++ /* Bootloader active LED toggle timer initialization */ ++ TIMSK1 = (1 << TOIE1); ++ TCCR1B = ((1 << CS11) | (1 << CS10)); ++} ++ ++/** ISR to periodically toggle the LEDs on the board to indicate that the bootloader is active. */ ++ISR(TIMER1_OVF_vect, ISR_BLOCK) ++{ ++ LEDs_ToggleLEDs(LEDS_LED1 | LEDS_LED2); ++} ++ ++/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs. */ ++void EVENT_USB_Device_Connect(void) ++{ ++ /* Indicate USB enumerating */ ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via ++ * the status LEDs and stops the Mass Storage management task. ++ */ ++void EVENT_USB_Device_Disconnect(void) ++{ ++ /* Indicate USB not ready */ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the library USB Configuration Changed event. */ ++void EVENT_USB_Device_ConfigurationChanged(void) ++{ ++ bool ConfigSuccess = true; ++ ++ /* Setup Mass Storage Data Endpoints */ ++ ConfigSuccess &= MS_Device_ConfigureEndpoints(&Disk_MS_Interface); ++ ++ /* Indicate endpoint configuration success or failure */ ++ LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); ++} ++ ++/** Event handler for the library USB Control Request reception event. */ ++void EVENT_USB_Device_ControlRequest(void) ++{ ++ MS_Device_ProcessControlRequest(&Disk_MS_Interface); ++} ++ ++/** Mass Storage class driver callback function the reception of SCSI commands from the host, which must be processed. ++ * ++ * \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface configuration structure being referenced ++ */ ++bool CALLBACK_MS_Device_SCSICommandReceived(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) ++{ ++ bool CommandSuccess; ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_BUSY); ++ CommandSuccess = SCSI_DecodeSCSICommand(MSInterfaceInfo); ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++ ++ /* Signal that a command was processed, must not exit bootloader yet */ ++ TicksSinceLastCommand = 0; ++ ++ return CommandSuccess; ++} diff --cc lib/lufa/Bootloaders/MassStorage/BootloaderMassStorage.h index 000000000,000000000..c9ddee4d7 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/MassStorage/BootloaderMassStorage.h @@@ -1,0 -1,0 +1,99 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 BootloaderMassStorage.c. ++ */ ++ ++#ifndef _BOOTLOADER_MASS_STORAGE_H_ ++#define _BOOTLOADER_MASS_STORAGE_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <string.h> ++ ++ #include "Descriptors.h" ++ #include "Config/AppConfig.h" ++ ++ #include "Lib/SCSI.h" ++ ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Platform/Platform.h> ++ ++ /* Preprocessor Checks: */ ++ #if !defined(__OPTIMIZE_SIZE__) ++ #error This bootloader requires that it be optimized for size, not speed, to fit into the target device. Change optimization settings and try again. ++ #endif ++ ++ /* 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) ++ ++ /** LED mask for the library LED driver, to indicate that the USB interface is busy. */ ++ #define LEDMASK_USB_BUSY LEDS_LED2 ++ ++ /** Magic bootloader key to unlock forced application start mode. */ ++ #define MAGIC_BOOT_KEY 0xDC42 ++ ++ /* Global Variables: */ ++ extern bool RunBootloader; ++ ++ /* Function Prototypes: */ ++ int main(void) AUX_BOOT_SECTION; ++ ++ void Application_Jump_Check(void) ATTR_INIT_SECTION(3); ++ ++ void EVENT_USB_Device_Connect(void) AUX_BOOT_SECTION; ++ void EVENT_USB_Device_Disconnect(void) AUX_BOOT_SECTION; ++ void EVENT_USB_Device_ConfigurationChanged(void) AUX_BOOT_SECTION; ++ void EVENT_USB_Device_ControlRequest(void) AUX_BOOT_SECTION; ++ ++ bool CALLBACK_MS_Device_SCSICommandReceived(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) AUX_BOOT_SECTION; ++ ++ #if defined(INCLUDE_FROM_BOOTLOADER_MASSSTORAGE_C) ++ static void SetupHardware(void) AUX_BOOT_SECTION; ++ #endif ++ ++#endif ++ diff --cc lib/lufa/Bootloaders/MassStorage/BootloaderMassStorage.txt index 000000000,000000000..0fea9d9fb new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/MassStorage/BootloaderMassStorage.txt @@@ -1,0 -1,0 +1,240 @@@ ++/** \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 Mass Storage Class USB AVR Bootloader ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * \li Series 6 USB AVRs (AT90USBxxx6) ++ * \li Series 4 USB AVRs (ATMEGAxxU4) - <i>See \ref SSec_Aux_Space</i> ++ * \li ATMEGA32U2 - <i>See \ref SSec_Aux_Space</i> ++ * ++ * \section Sec_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>Mass Storage Device</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>Bulk-Only Transport</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF Mass Storage Standard \n ++ * USB Bulk-Only Transport Standard \n ++ * SCSI Primary Commands Specification \n ++ * SCSI Block Commands Specification</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * This bootloader enumerates to the host as a Mass Storage device, capable of reading and writing a new binary ++ * firmware image file, to load firmware onto the AVR. ++ * ++ * Out of the box this bootloader builds for the AT90USB1287 with an 8KB bootloader section size, and will fit ++ * into 6KB of bootloader space. If you wish to alter this size and/or change the AVR model, you will need to ++ * edit the MCU, FLASH_SIZE_KB and BOOT_SECTION_SIZE_KB values in the accompanying makefile. ++ * ++ * When the bootloader is running, the board's LED(s) will flash at regular intervals to distinguish the ++ * bootloader from the normal user application. ++ * ++ * \warning <b>THIS BOOTLOADER IS NOT SECURE.</b> Malicious entities can recover written data, even if the device ++ * lockbits are set. ++ * ++ * \section Sec_Running Running the Bootloader ++ * ++ * On the USB AVR8 devices, setting the \c HWBE device fuse will cause the bootloader to run if the \c HWB pin of ++ * the AVR is grounded when the device is reset. ++ * ++ * The are two behaviours of this bootloader, depending on the device's fuses: ++ * ++ * <b>If the device's BOOTRST fuse is set</b>, the bootloader will run any time the system is reset from ++ * the external reset pin, unless no valid user application has been loaded. To initiate the bootloader, the ++ * device's external reset pin should be grounded momentarily. ++ * ++ * <b>If the device's BOOTRST fuse is not set</b>, the bootloader will run only if initiated via a software ++ * jump, or if the \c HWB pin was low during the last device reset (if the \c HWBE fuse is set). ++ * ++ * For board specific exceptions to the above, see below. ++ * ++ * \subsection SSec_XPLAIN Atmel Xplain Board ++ * Ground the USB AVR JTAG's \c TCK pin to ground when powering on the board to start the bootloader. This assumes the ++ * \c HWBE fuse is cleared and the \c BOOTRST fuse is set as the HWBE pin is not user accessible on this board. ++ * ++ * \subsection SSec_Leonardo Arduino Leonardo Board ++ * Ground \c IO13 when powering the board to start the bootloader. This assumes the \c HWBE fuse is cleared and the ++ * \c BOOTRST fuse is set as the HWBE pin is not user accessible on this board. ++ * ++ * \section Sec_Installation Driver Installation ++ * ++ * This bootloader uses the Mass Storage drivers inbuilt into all modern operating systems, thus no additional ++ * drivers need to be supplied for correct operation. ++ * ++ * \section Sec_HostApp Host Controller Application ++ * ++ * This bootloader is compatible with all operating systems that support the FAT12 file system format. To reprogram the ++ * device, overwrite a file stored on the virtual FAT filesystem with a new binary (BIN format) image. Remember to safely ++ * remove your device from the host using the host OS's ejection APIs, to ensure all data is correctly flushed to the ++ * bootloader's virtual filesystem and not cached in the OS's file system driver. ++ * ++ * The current device firmware can be read from the device by reading a file from the virtual FAT filesystem. Two files will ++ * be present: ++ * - <b>FLASH.BIN</b>, representing the AVR's internal flash memory ++ * - <b>EEPROM.BIN</b>, representing the AVR's internal EEPROM memory ++ * ++ * To convert an existing Intel HEX (.HEX) program file to a binary (.BIN) file suitable for this bootloader, run: ++ * \code ++ * avr-objcopy -O binary -R .eeprom -R .fuse -R .lock -R .signature input.hex output.bin ++ * \endcode ++ * From a terminal, replacing <tt>input.hex</tt> and <tt>output.bin</tt> with the respective input and output filenames. ++ * AVR EEPROM data files in Intel HEX format (.EEP) uses a similar technique: ++ * \code ++ * avr-objcopy -O binary input.eep output.bin ++ * \endcode ++ * ++ * \warning This bootloader is currently <b>incompatible with the Apple MacOS X OS Finder GUI</b>, due to the ++ * large amount of meta files this OS attempts to write to the disk along with the new binaries. On ++ * this platform, firmwares must be copied to the disk via the Terminal application only to prevent ++ * firmware corruption. ++ * ++ * \section Sec_API User Application API ++ * ++ * Several user application functions for FLASH and other special memory area manipulations are exposed by the bootloader, ++ * allowing the user application to call into the bootloader at runtime to read and write FLASH data. ++ * ++ * By default, the bootloader API jump table is located 32 bytes from the end of the device's FLASH memory, and follows the ++ * following layout: ++ * ++ * \code ++ * #define BOOTLOADER_API_TABLE_SIZE 32 ++ * #define BOOTLOADER_API_TABLE_START ((FLASHEND + 1UL) - BOOTLOADER_API_TABLE_SIZE) ++ * #define BOOTLOADER_API_CALL(Index) (void*)((BOOTLOADER_API_TABLE_START + (Index * 2)) / 2) ++ * ++ * void (*BootloaderAPI_ErasePage)(uint32_t Address) = BOOTLOADER_API_CALL(0); ++ * void (*BootloaderAPI_WritePage)(uint32_t Address) = BOOTLOADER_API_CALL(1); ++ * void (*BootloaderAPI_FillWord)(uint32_t Address, uint16_t Word) = BOOTLOADER_API_CALL(2); ++ * uint8_t (*BootloaderAPI_ReadSignature)(uint16_t Address) = BOOTLOADER_API_CALL(3); ++ * uint8_t (*BootloaderAPI_ReadFuse)(uint16_t Address) = BOOTLOADER_API_CALL(4); ++ * uint8_t (*BootloaderAPI_ReadLock)(void) = BOOTLOADER_API_CALL(5); ++ * void (*BootloaderAPI_WriteLock)(uint8_t LockBits) = BOOTLOADER_API_CALL(6); ++ * ++ * #define BOOTLOADER_MAGIC_SIGNATURE_START (BOOTLOADER_API_TABLE_START + (BOOTLOADER_API_TABLE_SIZE - 2)) ++ * #define BOOTLOADER_MAGIC_SIGNATURE 0xDCFB ++ * ++ * #define BOOTLOADER_CLASS_SIGNATURE_START (BOOTLOADER_API_TABLE_START + (BOOTLOADER_API_TABLE_SIZE - 4)) ++ * #define BOOTLOADER_MASS_STORAGE_SIGNATURE 0xDF30 ++ * ++ * #define BOOTLOADER_ADDRESS_START (BOOTLOADER_API_TABLE_START + (BOOTLOADER_API_TABLE_SIZE - 8)) ++ * #define BOOTLOADER_ADDRESS_LENGTH 4 ++ * \endcode ++ * ++ * From the application the API support of the bootloader can be detected by reading the FLASH memory bytes located at address ++ * \c BOOTLOADER_MAGIC_SIGNATURE_START and comparing them to the value \c BOOTLOADER_MAGIC_SIGNATURE. The class of bootloader ++ * can be determined by reading the FLASH memory bytes located at address \c BOOTLOADER_CLASS_SIGNATURE_START and comparing them ++ * to the value \c BOOTLOADER_MASS_STORAGE_SIGNATURE. The start address of the bootloader can be retrieved by reading the bytes ++ * of FLASH memory starting from address \c BOOTLOADER_ADDRESS_START. ++ * ++ * \subsection SSec_Aux_Space Auxiliary Bootloader Section ++ * To make the bootloader function on smaller devices (those with a physical bootloader section of smaller than 6KB) a second ++ * section of memory (called the <i>Auxiliary Bootloader Section</i>) is added before the start of the real bootloader section, ++ * and is filled with a portion of the bootloader code. This allows smaller devices to run the bootloader, at the cost of an ++ * additional portion of the device's FLASH (the bootloader section size in KB subtracted from the 6KB total size). A small ++ * trampoline is inserted at the start of the auxiliary section so that the bootloader will run normally in the case of a blank ++ * application section. ++ * ++ * On devices supporting a 8KB bootloader section size, the AUX section is not created in the final binary. ++ * ++ * \subsection SSec_API_MemLayout Device Memory Map ++ * The following illustration indicates the final memory map of the device when loaded with the bootloader. ++ * ++ * \verbatim ++ * +----------------------------+ 0x0000 ++ * | | ++ * | | ++ * | | ++ * | | ++ * | | ++ * | | ++ * | | ++ * | | ++ * | User Application | ++ * | | ++ * | | ++ * | | ++ * | | ++ * | | ++ * | | ++ * | | ++ * | | ++ * +----------------------------+ FLASHEND - BOOT_SECTION_SIZE - BOOT_AUX_SECTION_SIZE ++ * | Booloader Start Trampoline | ++ * | (Not User App. Accessible) | ++ * +----------------------------+ FLASHEND - BOOT_SECTION_SIZE - BOOT_AUX_SECTION_SIZE + 4 ++ * | | ++ * | Auxiliary Bootloader | ++ * | Space for Smaller Devices | ++ * | (Not User App. Accessible) | ++ * | | ++ * +----------------------------+ FLASHEND - BOOT_SECTION_SIZE ++ * | | ++ * | Bootloader Application | ++ * | (Not User App. Accessible) | ++ * | | ++ * +----------------------------+ FLASHEND - 96 ++ * | API Table Trampolines | ++ * | (Not User App. Accessible) | ++ * +----------------------------+ FLASHEND - 32 ++ * | Bootloader API Table | ++ * | (User App. Accessible) | ++ * +----------------------------+ FLASHEND - 8 ++ * | Bootloader ID Constants | ++ * | (User App. Accessible) | ++ * +----------------------------+ FLASHEND ++ * \endverbatim ++ * ++ * \section Sec_KnownIssues Known Issues: ++ * ++ * \par In some cases, the application is not fully loaded into the device. ++ * Write-caching on some operating systems may interfere with the normal ++ * operation of the bootloader. Write caching should be disabled when using the ++ * Mass Storage bootloader, or the file system synced via an appropriate command ++ * (such as the OS's normal disk ejection command) before disconnecting the device. ++ * ++ * \section Sec_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> ++ * <th><b>Define Name:</b></th> ++ * <th><b>Location:</b></th> ++ * <th><b>Description:</b></th> ++ * </tr> ++ * <tr> ++ * <td>NO_APP_START_ON_EJECT</td> ++ * <td>AppConfig.h</td> ++ * <td>Define to disable automatic start of the loaded application when the virtual ++ * Mass Storage disk is ejected on the host.</td> ++ * </tr> ++ * </table> ++ */ ++ diff --cc lib/lufa/Bootloaders/MassStorage/Config/AppConfig.h index 000000000,000000000..92eb364dc new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/MassStorage/Config/AppConfig.h @@@ -1,0 -1,0 +1,47 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief Application Configuration Header File ++ * ++ * This is a header file which is be used to configure LUFA's ++ * compile time options, as an alternative to the compile time ++ * constants supplied through a makefile. ++ * ++ * For information on what each token does, refer to the ++ * \ref Sec_Options section of the application documentation. ++ */ ++ ++#ifndef _APP_CONFIG_H_ ++#define _APP_CONFIG_H_ ++ ++// #define NO_APP_START_ON_EJECT ++ ++#endif diff --cc lib/lufa/Bootloaders/MassStorage/Config/LUFAConfig.h index 000000000,000000000..735317867 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/MassStorage/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++ #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++ #define USB_DEVICE_ONLY ++// #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++ #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++ #define USE_RAM_DESCRIPTORS ++// #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++ #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++ #define DEVICE_STATE_AS_GPIOR 0 ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++ #define INTERRUPT_CONTROL_ENDPOINT ++ #define NO_DEVICE_REMOTE_WAKEUP ++ #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Bootloaders/MassStorage/Descriptors.c index 000000000,000000000..e8bdbd4f5 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/MassStorage/Descriptors.c @@@ -1,0 -1,0 +1,157 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special ++ * computer-readable structures which the host requests upon device enumeration, to determine ++ * the device's capabilities and functions. ++ */ ++ ++#include "Descriptors.h" ++ ++ ++/** Device descriptor structure. This descriptor, located in SRAM memory, describes the overall ++ * device characteristics, including the supported USB version, control endpoint size and the ++ * number of device configurations. The descriptor is read out by the USB host when the enumeration ++ * process begins. ++ */ ++const USB_Descriptor_Device_t DeviceDescriptor = ++{ ++ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, ++ ++ .USBSpecification = VERSION_BCD(1,1,0), ++ .Class = USB_CSCP_NoDeviceClass, ++ .SubClass = USB_CSCP_NoDeviceSubclass, ++ .Protocol = USB_CSCP_NoDeviceProtocol, ++ ++ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, ++ ++ .VendorID = 0x03EB, ++ .ProductID = 0x2045, ++ .ReleaseNumber = VERSION_BCD(0,0,1), ++ ++ .ManufacturerStrIndex = NO_DESCRIPTOR, ++ .ProductStrIndex = NO_DESCRIPTOR, ++ .SerialNumStrIndex = NO_DESCRIPTOR, ++ ++ .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. ++ */ ++const USB_Descriptor_Configuration_t ConfigurationDescriptor = ++{ ++ .Config = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration}, ++ ++ .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t), ++ .TotalInterfaces = 1, ++ ++ .ConfigurationNumber = 1, ++ .ConfigurationStrIndex = NO_DESCRIPTOR, ++ ++ .ConfigAttributes = USB_CONFIG_ATTR_RESERVED, ++ ++ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) ++ }, ++ ++ .MS_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_MassStorage, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 2, ++ ++ .Class = MS_CSCP_MassStorageClass, ++ .SubClass = MS_CSCP_SCSITransparentSubclass, ++ .Protocol = MS_CSCP_BulkOnlyTransportProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .MS_DataInEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = MASS_STORAGE_IN_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = MASS_STORAGE_IO_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++ ++ .MS_DataOutEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = MASS_STORAGE_OUT_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = MASS_STORAGE_IO_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ } ++}; ++ ++/** 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 uint16_t wIndex, ++ const void** const DescriptorAddress) ++{ ++ const uint8_t DescriptorType = (wValue >> 8); ++ ++ const void* Address = NULL; ++ uint16_t Size = NO_DESCRIPTOR; ++ ++ /* If/Else If chain compiles slightly smaller than a switch case */ ++ if (DescriptorType == DTYPE_Device) ++ { ++ Address = &DeviceDescriptor; ++ Size = sizeof(USB_Descriptor_Device_t); ++ } ++ else if (DescriptorType == DTYPE_Configuration) ++ { ++ Address = &ConfigurationDescriptor; ++ Size = sizeof(USB_Descriptor_Configuration_t); ++ } ++ ++ *DescriptorAddress = Address; ++ return Size; ++} ++ diff --cc lib/lufa/Bootloaders/MassStorage/Descriptors.h index 000000000,000000000..506f41af8 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/MassStorage/Descriptors.h @@@ -1,0 -1,0 +1,88 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 "BootloaderAPI.h" ++ ++ /* Macros: */ ++ /** Endpoint address of the Mass Storage device-to-host data IN endpoint. */ ++ #define MASS_STORAGE_IN_EPADDR (ENDPOINT_DIR_IN | 3) ++ ++ /** Endpoint address of the Mass Storage host-to-device data OUT endpoint. */ ++ #define MASS_STORAGE_OUT_EPADDR (ENDPOINT_DIR_OUT | 4) ++ ++ /** Size in bytes of the Mass Storage data endpoints. */ ++ #define MASS_STORAGE_IO_EPSIZE 64 ++ ++ /* 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; ++ ++ // Mass Storage Interface ++ USB_Descriptor_Interface_t MS_Interface; ++ USB_Descriptor_Endpoint_t MS_DataInEndpoint; ++ USB_Descriptor_Endpoint_t MS_DataOutEndpoint; ++ } USB_Descriptor_Configuration_t; ++ ++ ++ /** Enum for the device interface descriptor IDs within the device. Each interface descriptor ++ * should have a unique ID index associated with it, which can be used to refer to the ++ * interface from other descriptors. ++ */ ++ enum InterfaceDescriptors_t ++ { ++ INTERFACE_ID_MassStorage = 0, /**< Mass storage interface descriptor ID */ ++ }; ++ ++ /* Function Prototypes: */ ++ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ++ const uint16_t wIndex, ++ const void** const DescriptorAddress) ++ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3) AUX_BOOT_SECTION; ++ ++#endif ++ diff --cc lib/lufa/Bootloaders/MassStorage/Lib/SCSI.c index 000000000,000000000..3c14eb901 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/MassStorage/Lib/SCSI.c @@@ -1,0 -1,0 +1,294 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * SCSI command processing routines, for SCSI commands issued by the host. Mass Storage ++ * devices use a thin "Bulk-Only Transport" protocol for issuing commands and status information, ++ * which wrap around standard SCSI device commands for controlling the actual storage medium. ++ */ ++ ++#define INCLUDE_FROM_SCSI_C ++#include "SCSI.h" ++ ++/** Structure to hold the SCSI response data to a SCSI INQUIRY command. This gives information about the device's ++ * features and capabilities. ++ */ ++static const SCSI_Inquiry_Response_t InquiryData = ++ { ++ .DeviceType = DEVICE_TYPE_BLOCK, ++ .PeripheralQualifier = 0, ++ ++ .Removable = true, ++ ++ .Version = 0, ++ ++ .ResponseDataFormat = 2, ++ .NormACA = false, ++ .TrmTsk = false, ++ .AERC = false, ++ ++ .AdditionalLength = 0x1F, ++ ++ .SoftReset = false, ++ .CmdQue = false, ++ .Linked = false, ++ .Sync = false, ++ .WideBus16Bit = false, ++ .WideBus32Bit = false, ++ .RelAddr = false, ++ ++ .VendorID = "LUFA", ++ .ProductID = "Bootloader", ++ .RevisionID = {'0','.','0','0'}, ++ }; ++ ++/** Structure to hold the sense data for the last issued SCSI command, which is returned to the host after a SCSI REQUEST SENSE ++ * command is issued. This gives information on exactly why the last command failed to complete. ++ */ ++static SCSI_Request_Sense_Response_t SenseData = ++ { ++ .ResponseCode = 0x70, ++ .AdditionalLength = 0x0A, ++ }; ++ ++ ++/** Main routine to process the SCSI command located in the Command Block Wrapper read from the host. This dispatches ++ * to the appropriate SCSI command handling routine if the issued command is supported by the device, else it returns ++ * a command failure due to a ILLEGAL REQUEST. ++ * ++ * \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with ++ * ++ * \return Boolean \c true if the command completed successfully, \c false otherwise ++ */ ++bool SCSI_DecodeSCSICommand(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) ++{ ++ bool CommandSuccess = false; ++ ++ /* Run the appropriate SCSI command hander function based on the passed command */ ++ switch (MSInterfaceInfo->State.CommandBlock.SCSICommandData[0]) ++ { ++ case SCSI_CMD_INQUIRY: ++ CommandSuccess = SCSI_Command_Inquiry(MSInterfaceInfo); ++ break; ++ case SCSI_CMD_REQUEST_SENSE: ++ CommandSuccess = SCSI_Command_Request_Sense(MSInterfaceInfo); ++ break; ++ case SCSI_CMD_READ_CAPACITY_10: ++ CommandSuccess = SCSI_Command_Read_Capacity_10(MSInterfaceInfo); ++ break; ++ case SCSI_CMD_WRITE_10: ++ CommandSuccess = SCSI_Command_ReadWrite_10(MSInterfaceInfo, DATA_WRITE); ++ break; ++ case SCSI_CMD_READ_10: ++ CommandSuccess = SCSI_Command_ReadWrite_10(MSInterfaceInfo, DATA_READ); ++ break; ++ case SCSI_CMD_MODE_SENSE_6: ++ CommandSuccess = SCSI_Command_ModeSense_6(MSInterfaceInfo); ++ break; ++ case SCSI_CMD_START_STOP_UNIT: ++#if !defined(NO_APP_START_ON_EJECT) ++ /* If the user ejected the volume, signal bootloader exit at next opportunity. */ ++ RunBootloader = ((MSInterfaceInfo->State.CommandBlock.SCSICommandData[4] & 0x03) != 0x02); ++#endif ++ case SCSI_CMD_SEND_DIAGNOSTIC: ++ case SCSI_CMD_TEST_UNIT_READY: ++ case SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL: ++ case SCSI_CMD_VERIFY_10: ++ /* These commands should just succeed, no handling required */ ++ CommandSuccess = true; ++ MSInterfaceInfo->State.CommandBlock.DataTransferLength = 0; ++ break; ++ default: ++ /* Update the SENSE key to reflect the invalid command */ ++ SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST, ++ SCSI_ASENSE_INVALID_COMMAND, ++ SCSI_ASENSEQ_NO_QUALIFIER); ++ break; ++ } ++ ++ /* Check if command was successfully processed */ ++ if (CommandSuccess) ++ { ++ SCSI_SET_SENSE(SCSI_SENSE_KEY_GOOD, ++ SCSI_ASENSE_NO_ADDITIONAL_INFORMATION, ++ SCSI_ASENSEQ_NO_QUALIFIER); ++ ++ return true; ++ } ++ ++ return false; ++} ++ ++/** Command processing for an issued SCSI INQUIRY command. This command returns information about the device's features ++ * and capabilities to the host. ++ * ++ * \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with ++ * ++ * \return Boolean \c true if the command completed successfully, \c false otherwise. ++ */ ++static bool SCSI_Command_Inquiry(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) ++{ ++ uint16_t AllocationLength = SwapEndian_16(*(uint16_t*)&MSInterfaceInfo->State.CommandBlock.SCSICommandData[3]); ++ uint16_t BytesTransferred = MIN(AllocationLength, sizeof(InquiryData)); ++ ++ /* Only the standard INQUIRY data is supported, check if any optional INQUIRY bits set */ ++ if ((MSInterfaceInfo->State.CommandBlock.SCSICommandData[1] & ((1 << 0) | (1 << 1))) || ++ MSInterfaceInfo->State.CommandBlock.SCSICommandData[2]) ++ { ++ /* Optional but unsupported bits set - update the SENSE key and fail the request */ ++ SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST, ++ SCSI_ASENSE_INVALID_FIELD_IN_CDB, ++ SCSI_ASENSEQ_NO_QUALIFIER); ++ ++ return false; ++ } ++ ++ Endpoint_Write_Stream_LE(&InquiryData, BytesTransferred, NULL); ++ ++ /* Pad out remaining bytes with 0x00 */ ++ Endpoint_Null_Stream((AllocationLength - BytesTransferred), NULL); ++ ++ /* Finalize the stream transfer to send the last packet */ ++ Endpoint_ClearIN(); ++ ++ /* Succeed the command and update the bytes transferred counter */ ++ MSInterfaceInfo->State.CommandBlock.DataTransferLength -= BytesTransferred; ++ ++ return true; ++} ++ ++/** Command processing for an issued SCSI REQUEST SENSE command. This command returns information about the last issued command, ++ * including the error code and additional error information so that the host can determine why a command failed to complete. ++ * ++ * \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with ++ * ++ * \return Boolean \c true if the command completed successfully, \c false otherwise. ++ */ ++static bool SCSI_Command_Request_Sense(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) ++{ ++ uint8_t AllocationLength = MSInterfaceInfo->State.CommandBlock.SCSICommandData[4]; ++ uint8_t BytesTransferred = MIN(AllocationLength, sizeof(SenseData)); ++ ++ Endpoint_Write_Stream_LE(&SenseData, BytesTransferred, NULL); ++ Endpoint_Null_Stream((AllocationLength - BytesTransferred), NULL); ++ Endpoint_ClearIN(); ++ ++ /* Succeed the command and update the bytes transferred counter */ ++ MSInterfaceInfo->State.CommandBlock.DataTransferLength -= BytesTransferred; ++ ++ return true; ++} ++ ++/** Command processing for an issued SCSI READ CAPACITY (10) command. This command returns information about the device's capacity ++ * on the selected Logical Unit (drive), as a number of OS-sized blocks. ++ * ++ * \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with ++ * ++ * \return Boolean \c true if the command completed successfully, \c false otherwise. ++ */ ++static bool SCSI_Command_Read_Capacity_10(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) ++{ ++ Endpoint_Write_32_BE(LUN_MEDIA_BLOCKS - 1); ++ Endpoint_Write_32_BE(SECTOR_SIZE_BYTES); ++ Endpoint_ClearIN(); ++ ++ /* Succeed the command and update the bytes transferred counter */ ++ MSInterfaceInfo->State.CommandBlock.DataTransferLength -= 8; ++ ++ return true; ++} ++ ++/** Command processing for an issued SCSI READ (10) or WRITE (10) command. This command reads in the block start address ++ * and total number of blocks to process, then calls the appropriate low-level Dataflash routine to handle the actual ++ * reading and writing of the data. ++ * ++ * \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with ++ * \param[in] IsDataRead Indicates if the command is a READ (10) command or WRITE (10) command (DATA_READ or DATA_WRITE) ++ * ++ * \return Boolean \c true if the command completed successfully, \c false otherwise. ++ */ ++static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo, ++ const bool IsDataRead) ++{ ++ uint16_t BlockAddress; ++ uint16_t TotalBlocks; ++ ++ /* Load in the 32-bit block address (SCSI uses big-endian, so have to reverse the byte order) */ ++ BlockAddress = SwapEndian_32(*(uint32_t*)&MSInterfaceInfo->State.CommandBlock.SCSICommandData[2]); ++ ++ /* Load in the 16-bit total blocks (SCSI uses big-endian, so have to reverse the byte order) */ ++ TotalBlocks = SwapEndian_16(*(uint16_t*)&MSInterfaceInfo->State.CommandBlock.SCSICommandData[7]); ++ ++ /* Check if the block address is outside the maximum allowable value for the LUN */ ++ if (BlockAddress >= LUN_MEDIA_BLOCKS) ++ { ++ /* Block address is invalid, update SENSE key and return command fail */ ++ SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST, ++ SCSI_ASENSE_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE, ++ SCSI_ASENSEQ_NO_QUALIFIER); ++ ++ return false; ++ } ++ ++ /* Determine if the packet is a READ (10) or WRITE (10) command, call appropriate function */ ++ for (uint16_t i = 0; i < TotalBlocks; i++) ++ { ++ if (IsDataRead == DATA_READ) ++ VirtualFAT_ReadBlock(BlockAddress + i); ++ else ++ VirtualFAT_WriteBlock(BlockAddress + i); ++ } ++ ++ /* Update the bytes transferred counter and succeed the command */ ++ MSInterfaceInfo->State.CommandBlock.DataTransferLength -= ((uint32_t)TotalBlocks * SECTOR_SIZE_BYTES); ++ ++ return true; ++} ++ ++/** Command processing for an issued SCSI MODE SENSE (6) command. This command returns various informational pages about ++ * the SCSI device, as well as the device's Write Protect status. ++ * ++ * \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with ++ * ++ * \return Boolean \c true if the command completed successfully, \c false otherwise. ++ */ ++static bool SCSI_Command_ModeSense_6(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) ++{ ++ /* Send an empty header response indicating Write Protect flag is off */ ++ Endpoint_Write_32_LE(0); ++ Endpoint_ClearIN(); ++ ++ /* Update the bytes transferred counter and succeed the command */ ++ MSInterfaceInfo->State.CommandBlock.DataTransferLength -= 4; ++ ++ return true; ++} ++ diff --cc lib/lufa/Bootloaders/MassStorage/Lib/SCSI.h index 000000000,000000000..419559336 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/MassStorage/Lib/SCSI.h @@@ -1,0 -1,0 +1,84 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 SCSI.c. ++ */ ++ ++#ifndef _SCSI_H_ ++#define _SCSI_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/pgmspace.h> ++ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include "../BootloaderMassStorage.h" ++ #include "../Descriptors.h" ++ #include "VirtualFAT.h" ++ ++ /* Macros: */ ++ /** Macro to set the current SCSI sense data to the given key, additional sense code and additional sense qualifier. This ++ * is for convenience, as it allows for all three sense values (returned upon request to the host to give information about ++ * the last command failure) in a quick and easy manner. ++ * ++ * \param[in] Key New SCSI sense key to set the sense code to ++ * \param[in] Acode New SCSI additional sense key to set the additional sense code to ++ * \param[in] Aqual New SCSI additional sense key qualifier to set the additional sense qualifier code to ++ */ ++ #define SCSI_SET_SENSE(Key, Acode, Aqual) do { SenseData.SenseKey = (Key); \ ++ SenseData.AdditionalSenseCode = (Acode); \ ++ SenseData.AdditionalSenseQualifier = (Aqual); } while (0) ++ ++ /** Macro for the \ref SCSI_Command_ReadWrite_10() function, to indicate that data is to be read from the storage medium. */ ++ #define DATA_READ true ++ ++ /** Macro for the \ref SCSI_Command_ReadWrite_10() function, to indicate that data is to be written to the storage medium. */ ++ #define DATA_WRITE false ++ ++ /** Value for the DeviceType entry in the SCSI_Inquiry_Response_t enum, indicating a Block Media device. */ ++ #define DEVICE_TYPE_BLOCK 0x00 ++ ++ /* Function Prototypes: */ ++ bool SCSI_DecodeSCSICommand(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) AUX_BOOT_SECTION; ++ ++ #if defined(INCLUDE_FROM_SCSI_C) ++ static bool SCSI_Command_Inquiry(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) AUX_BOOT_SECTION; ++ static bool SCSI_Command_Request_Sense(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) AUX_BOOT_SECTION; ++ static bool SCSI_Command_Read_Capacity_10(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) AUX_BOOT_SECTION; ++ static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo, ++ const bool IsDataRead) AUX_BOOT_SECTION; ++ static bool SCSI_Command_ModeSense_6(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) AUX_BOOT_SECTION; ++ #endif ++ ++#endif ++ diff --cc lib/lufa/Bootloaders/MassStorage/Lib/VirtualFAT.c index 000000000,000000000..ffd453128 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/MassStorage/Lib/VirtualFAT.c @@@ -1,0 -1,0 +1,482 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * Virtualized FAT12 filesystem implementation, to perform self-programming ++ * in response to read and write requests to the virtual filesystem by the ++ * host PC. ++ */ ++ ++#define INCLUDE_FROM_VIRTUAL_FAT_C ++#include "VirtualFAT.h" ++ ++/** FAT filesystem boot sector block, must be the first sector on the physical ++ * disk so that the host can identify the presence of a FAT filesystem. This ++ * block is truncated; normally a large bootstrap section is located near the ++ * end of the block for booting purposes however as this is not meant to be a ++ * bootable disk it is omitted for space reasons. ++ * ++ * \note When returning the boot block to the host, the magic signature 0xAA55 ++ * must be added to the very end of the block to identify it as a boot ++ * block. ++ */ ++static const FATBootBlock_t BootBlock = ++ { ++ .Bootstrap = {0xEB, 0x3C, 0x90}, ++ .Description = "mkdosfs", ++ .SectorSize = SECTOR_SIZE_BYTES, ++ .SectorsPerCluster = SECTOR_PER_CLUSTER, ++ .ReservedSectors = 1, ++ .FATCopies = 2, ++ .RootDirectoryEntries = (SECTOR_SIZE_BYTES / sizeof(FATDirectoryEntry_t)), ++ .TotalSectors16 = LUN_MEDIA_BLOCKS, ++ .MediaDescriptor = 0xF8, ++ .SectorsPerFAT = 1, ++ .SectorsPerTrack = (LUN_MEDIA_BLOCKS % 64), ++ .Heads = (LUN_MEDIA_BLOCKS / 64), ++ .HiddenSectors = 0, ++ .TotalSectors32 = 0, ++ .PhysicalDriveNum = 0, ++ .ExtendedBootRecordSig = 0x29, ++ .VolumeSerialNumber = 0x12345678, ++ .VolumeLabel = "LUFA BOOT ", ++ .FilesystemIdentifier = "FAT12 ", ++ }; ++ ++/** FAT 8.3 style directory entry, for the virtual FLASH contents file. */ ++static FATDirectoryEntry_t FirmwareFileEntries[] = ++ { ++ /* Root volume label entry; disk label is contained in the Filename and ++ * Extension fields (concatenated) with a special attribute flag - other ++ * fields are ignored. Should be the same as the label in the boot block. ++ */ ++ [DISK_FILE_ENTRY_VolumeID] = ++ { ++ .MSDOS_Directory = ++ { ++ .Name = "LUFA BOOT ", ++ .Attributes = FAT_FLAG_VOLUME_NAME, ++ .Reserved = {0}, ++ .CreationTime = 0, ++ .CreationDate = 0, ++ .StartingCluster = 0, ++ .Reserved2 = 0, ++ } ++ }, ++ ++ /* VFAT Long File Name entry for the virtual firmware file; required to ++ * prevent corruption from systems that are unable to detect the device ++ * as being a legacy MSDOS style FAT12 volume. */ ++ [DISK_FILE_ENTRY_FLASH_LFN] = ++ { ++ .VFAT_LongFileName = ++ { ++ .Ordinal = 1 | FAT_ORDINAL_LAST_ENTRY, ++ .Attribute = FAT_FLAG_LONG_FILE_NAME, ++ .Reserved1 = 0, ++ .Reserved2 = 0, ++ ++ .Checksum = FAT_CHECKSUM('F','L','A','S','H',' ',' ',' ','B','I','N'), ++ ++ .Unicode1 = 'F', ++ .Unicode2 = 'L', ++ .Unicode3 = 'A', ++ .Unicode4 = 'S', ++ .Unicode5 = 'H', ++ .Unicode6 = '.', ++ .Unicode7 = 'B', ++ .Unicode8 = 'I', ++ .Unicode9 = 'N', ++ .Unicode10 = 0, ++ .Unicode11 = 0, ++ .Unicode12 = 0, ++ .Unicode13 = 0, ++ } ++ }, ++ ++ /* MSDOS file entry for the virtual Firmware image. */ ++ [DISK_FILE_ENTRY_FLASH_MSDOS] = ++ { ++ .MSDOS_File = ++ { ++ .Filename = "FLASH ", ++ .Extension = "BIN", ++ .Attributes = 0, ++ .Reserved = {0}, ++ .CreationTime = FAT_TIME(1, 1, 0), ++ .CreationDate = FAT_DATE(14, 2, 1989), ++ .StartingCluster = 2, ++ .FileSizeBytes = FLASH_FILE_SIZE_BYTES, ++ } ++ }, ++ ++ [DISK_FILE_ENTRY_EEPROM_LFN] = ++ { ++ .VFAT_LongFileName = ++ { ++ .Ordinal = 1 | FAT_ORDINAL_LAST_ENTRY, ++ .Attribute = FAT_FLAG_LONG_FILE_NAME, ++ .Reserved1 = 0, ++ .Reserved2 = 0, ++ ++ .Checksum = FAT_CHECKSUM('E','E','P','R','O','M',' ',' ','B','I','N'), ++ ++ .Unicode1 = 'E', ++ .Unicode2 = 'E', ++ .Unicode3 = 'P', ++ .Unicode4 = 'R', ++ .Unicode5 = 'O', ++ .Unicode6 = 'M', ++ .Unicode7 = '.', ++ .Unicode8 = 'B', ++ .Unicode9 = 'I', ++ .Unicode10 = 'N', ++ .Unicode11 = 0, ++ .Unicode12 = 0, ++ .Unicode13 = 0, ++ } ++ }, ++ ++ [DISK_FILE_ENTRY_EEPROM_MSDOS] = ++ { ++ .MSDOS_File = ++ { ++ .Filename = "EEPROM ", ++ .Extension = "BIN", ++ .Attributes = 0, ++ .Reserved = {0}, ++ .CreationTime = FAT_TIME(1, 1, 0), ++ .CreationDate = FAT_DATE(14, 2, 1989), ++ .StartingCluster = 2 + FILE_CLUSTERS(FLASH_FILE_SIZE_BYTES), ++ .FileSizeBytes = EEPROM_FILE_SIZE_BYTES, ++ } ++ }, ++ }; ++ ++/** Starting cluster of the virtual FLASH.BIN file on disk, tracked so that the ++ * offset from the start of the data sector can be determined. On Windows ++ * systems files are usually replaced using the original file's disk clusters, ++ * while Linux appears to overwrite with an offset which must be compensated for. ++ */ ++static const uint16_t* FLASHFileStartCluster = &FirmwareFileEntries[DISK_FILE_ENTRY_FLASH_MSDOS].MSDOS_File.StartingCluster; ++ ++/** Starting cluster of the virtual EEPROM.BIN file on disk, tracked so that the ++ * offset from the start of the data sector can be determined. On Windows ++ * systems files are usually replaced using the original file's disk clusters, ++ * while Linux appears to overwrite with an offset which must be compensated for. ++ */ ++static const uint16_t* EEPROMFileStartCluster = &FirmwareFileEntries[DISK_FILE_ENTRY_EEPROM_MSDOS].MSDOS_File.StartingCluster; ++ ++/** Reads a byte of EEPROM out from the EEPROM memory space. ++ * ++ * \note This function is required as the avr-libc EEPROM functions do not cope ++ * with linker relaxations, and a jump longer than 4K of FLASH on the ++ * larger USB AVRs will break the linker. This function is marked as ++ * never inlinable and placed into the normal text segment so that the ++ * call to the EEPROM function will be short even if the AUX boot section ++ * is used. ++ * ++ * \param[in] Address Address of the EEPROM location to read from ++ * ++ * \return Read byte of EEPROM data. ++ */ ++static uint8_t ReadEEPROMByte(const uint8_t* const Address) ++{ ++ return eeprom_read_byte(Address); ++} ++ ++/** Writes a byte of EEPROM out to the EEPROM memory space. ++ * ++ * \note This function is required as the avr-libc EEPROM functions do not cope ++ * with linker relaxations, and a jump longer than 4K of FLASH on the ++ * larger USB AVRs will break the linker. This function is marked as ++ * never inlinable and placed into the normal text segment so that the ++ * call to the EEPROM function will be short even if the AUX boot section ++ * is used. ++ * ++ * \param[in] Address Address of the EEPROM location to write to ++ * \param[in] Data New data to write to the EEPROM location ++ */ ++static void WriteEEPROMByte(uint8_t* const Address, ++ const uint8_t Data) ++{ ++ eeprom_update_byte(Address, Data); ++} ++ ++/** Updates a FAT12 cluster entry in the FAT file table with the specified next ++ * chain index. If the cluster is the last in the file chain, the magic value ++ * \c 0xFFF should be used. ++ * ++ * \note FAT data cluster indexes are offset by 2, so that cluster 2 is the ++ * first file data cluster on the disk. See the FAT specification. ++ * ++ * \param[out] FATTable Pointer to the FAT12 allocation table ++ * \param[in] Index Index of the cluster entry to update ++ * \param[in] ChainEntry Next cluster index in the file chain ++ */ ++static void UpdateFAT12ClusterEntry(uint8_t* const FATTable, ++ const uint16_t Index, ++ const uint16_t ChainEntry) ++{ ++ /* Calculate the starting offset of the cluster entry in the FAT12 table */ ++ uint8_t FATOffset = (Index + (Index >> 1)); ++ bool UpperNibble = ((Index & 1) != 0); ++ ++ /* Check if the start of the entry is at an upper nibble of the byte, fill ++ * out FAT12 entry as required */ ++ if (UpperNibble) ++ { ++ FATTable[FATOffset] = (FATTable[FATOffset] & 0x0F) | ((ChainEntry & 0x0F) << 4); ++ FATTable[FATOffset + 1] = (ChainEntry >> 4); ++ } ++ else ++ { ++ FATTable[FATOffset] = ChainEntry; ++ FATTable[FATOffset + 1] = (FATTable[FATOffset] & 0xF0) | (ChainEntry >> 8); ++ } ++} ++ ++/** Updates a FAT12 cluster chain in the FAT file table with a linear chain of ++ * the specified length. ++ * ++ * \note FAT data cluster indexes are offset by 2, so that cluster 2 is the ++ * first file data cluster on the disk. See the FAT specification. ++ * ++ * \param[out] FATTable Pointer to the FAT12 allocation table ++ * \param[in] Index Index of the start of the cluster chain to update ++ * \param[in] ChainLength Length of the chain to write, in clusters ++ */ ++static void UpdateFAT12ClusterChain(uint8_t* const FATTable, ++ const uint16_t Index, ++ const uint8_t ChainLength) ++{ ++ for (uint8_t i = 0; i < ChainLength; i++) ++ { ++ uint16_t CurrentCluster = Index + i; ++ uint16_t NextCluster = CurrentCluster + 1; ++ ++ /* Mark last cluster as end of file */ ++ if (i == (ChainLength - 1)) ++ NextCluster = 0xFFF; ++ ++ UpdateFAT12ClusterEntry(FATTable, CurrentCluster, NextCluster); ++ } ++} ++ ++/** Reads or writes a block of data from/to the physical device FLASH using a ++ * block buffer stored in RAM, if the requested block is within the virtual ++ * firmware file's sector ranges in the emulated FAT file system. ++ * ++ * \param[in] BlockNumber Physical disk block to read from/write to ++ * \param[in,out] BlockBuffer Pointer to the start of the block buffer in RAM ++ * \param[in] Read If \c true, the requested block is read, if ++ * \c false, the requested block is written ++ */ ++static void ReadWriteFLASHFileBlock(const uint16_t BlockNumber, ++ uint8_t* BlockBuffer, ++ const bool Read) ++{ ++ uint16_t FileStartBlock = DISK_BLOCK_DataStartBlock + (*FLASHFileStartCluster - 2) * SECTOR_PER_CLUSTER; ++ uint16_t FileEndBlock = FileStartBlock + (FILE_SECTORS(FLASH_FILE_SIZE_BYTES) - 1); ++ ++ /* Range check the write request - abort if requested block is not within the ++ * virtual firmware file sector range */ ++ if (!((BlockNumber >= FileStartBlock) && (BlockNumber <= FileEndBlock))) ++ return; ++ ++ #if (FLASHEND > 0xFFFF) ++ uint32_t FlashAddress = (uint32_t)(BlockNumber - FileStartBlock) * SECTOR_SIZE_BYTES; ++ #else ++ uint16_t FlashAddress = (uint16_t)(BlockNumber - FileStartBlock) * SECTOR_SIZE_BYTES; ++ #endif ++ ++ if (Read) ++ { ++ /* Read out the mapped block of data from the device's FLASH */ ++ for (uint16_t i = 0; i < SECTOR_SIZE_BYTES; i++) ++ { ++ #if (FLASHEND > 0xFFFF) ++ BlockBuffer[i] = pgm_read_byte_far(FlashAddress++); ++ #else ++ BlockBuffer[i] = pgm_read_byte(FlashAddress++); ++ #endif ++ } ++ } ++ else ++ { ++ /* Write out the mapped block of data to the device's FLASH */ ++ for (uint16_t i = 0; i < SECTOR_SIZE_BYTES; i += 2) ++ { ++ if ((FlashAddress % SPM_PAGESIZE) == 0) ++ { ++ /* Erase the given FLASH page, ready to be programmed */ ++ BootloaderAPI_ErasePage(FlashAddress); ++ } ++ ++ /* Write the next data word to the FLASH page */ ++ BootloaderAPI_FillWord(FlashAddress, (BlockBuffer[i + 1] << 8) | BlockBuffer[i]); ++ FlashAddress += 2; ++ ++ if ((FlashAddress % SPM_PAGESIZE) == 0) ++ { ++ /* Write the filled FLASH page to memory */ ++ BootloaderAPI_WritePage(FlashAddress - SPM_PAGESIZE); ++ } ++ } ++ } ++} ++ ++/** Reads or writes a block of data from/to the physical device EEPROM using a ++ * block buffer stored in RAM, if the requested block is within the virtual ++ * firmware file's sector ranges in the emulated FAT file system. ++ * ++ * \param[in] BlockNumber Physical disk block to read from/write to ++ * \param[in,out] BlockBuffer Pointer to the start of the block buffer in RAM ++ * \param[in] Read If \c true, the requested block is read, if ++ * \c false, the requested block is written ++ */ ++static void ReadWriteEEPROMFileBlock(const uint16_t BlockNumber, ++ uint8_t* BlockBuffer, ++ const bool Read) ++{ ++ uint16_t FileStartBlock = DISK_BLOCK_DataStartBlock + (*EEPROMFileStartCluster - 2) * SECTOR_PER_CLUSTER; ++ uint16_t FileEndBlock = FileStartBlock + (FILE_SECTORS(EEPROM_FILE_SIZE_BYTES) - 1); ++ ++ /* Range check the write request - abort if requested block is not within the ++ * virtual firmware file sector range */ ++ if (!((BlockNumber >= FileStartBlock) && (BlockNumber <= FileEndBlock))) ++ return; ++ ++ uint16_t EEPROMAddress = (uint16_t)(BlockNumber - FileStartBlock) * SECTOR_SIZE_BYTES; ++ ++ if (Read) ++ { ++ /* Read out the mapped block of data from the device's EEPROM */ ++ for (uint16_t i = 0; i < SECTOR_SIZE_BYTES; i++) ++ BlockBuffer[i] = ReadEEPROMByte((uint8_t*)EEPROMAddress++); ++ } ++ else ++ { ++ /* Write out the mapped block of data to the device's EEPROM */ ++ for (uint16_t i = 0; i < SECTOR_SIZE_BYTES; i++) ++ WriteEEPROMByte((uint8_t*)EEPROMAddress++, BlockBuffer[i]); ++ } ++} ++ ++/** Writes a block of data to the virtual FAT filesystem, from the USB Mass ++ * Storage interface. ++ * ++ * \param[in] BlockNumber Index of the block to write. ++ */ ++void VirtualFAT_WriteBlock(const uint16_t BlockNumber) ++{ ++ uint8_t BlockBuffer[SECTOR_SIZE_BYTES]; ++ ++ /* Buffer the entire block to be written from the host */ ++ Endpoint_Read_Stream_LE(BlockBuffer, sizeof(BlockBuffer), NULL); ++ Endpoint_ClearOUT(); ++ ++ switch (BlockNumber) ++ { ++ case DISK_BLOCK_BootBlock: ++ case DISK_BLOCK_FATBlock1: ++ case DISK_BLOCK_FATBlock2: ++ /* Ignore writes to the boot and FAT blocks */ ++ ++ break; ++ ++ case DISK_BLOCK_RootFilesBlock: ++ /* Copy over the updated directory entries */ ++ memcpy(FirmwareFileEntries, BlockBuffer, sizeof(FirmwareFileEntries)); ++ ++ break; ++ ++ default: ++ ReadWriteFLASHFileBlock(BlockNumber, BlockBuffer, false); ++ ReadWriteEEPROMFileBlock(BlockNumber, BlockBuffer, false); ++ ++ break; ++ } ++} ++ ++/** Reads a block of data from the virtual FAT filesystem, and sends it to the ++ * host via the USB Mass Storage interface. ++ * ++ * \param[in] BlockNumber Index of the block to read. ++ */ ++void VirtualFAT_ReadBlock(const uint16_t BlockNumber) ++{ ++ uint8_t BlockBuffer[SECTOR_SIZE_BYTES]; ++ memset(BlockBuffer, 0x00, sizeof(BlockBuffer)); ++ ++ switch (BlockNumber) ++ { ++ case DISK_BLOCK_BootBlock: ++ memcpy(BlockBuffer, &BootBlock, sizeof(FATBootBlock_t)); ++ ++ /* Add the magic signature to the end of the block */ ++ BlockBuffer[SECTOR_SIZE_BYTES - 2] = 0x55; ++ BlockBuffer[SECTOR_SIZE_BYTES - 1] = 0xAA; ++ ++ break; ++ ++ case DISK_BLOCK_FATBlock1: ++ case DISK_BLOCK_FATBlock2: ++ /* Cluster 0: Media type/Reserved */ ++ UpdateFAT12ClusterEntry(BlockBuffer, 0, 0xF00 | BootBlock.MediaDescriptor); ++ ++ /* Cluster 1: Reserved */ ++ UpdateFAT12ClusterEntry(BlockBuffer, 1, 0xFFF); ++ ++ /* Cluster 2 onwards: Cluster chain of FLASH.BIN */ ++ UpdateFAT12ClusterChain(BlockBuffer, *FLASHFileStartCluster, FILE_CLUSTERS(FLASH_FILE_SIZE_BYTES)); ++ ++ /* Cluster 2+n onwards: Cluster chain of EEPROM.BIN */ ++ UpdateFAT12ClusterChain(BlockBuffer, *EEPROMFileStartCluster, FILE_CLUSTERS(EEPROM_FILE_SIZE_BYTES)); ++ ++ break; ++ ++ case DISK_BLOCK_RootFilesBlock: ++ memcpy(BlockBuffer, FirmwareFileEntries, sizeof(FirmwareFileEntries)); ++ ++ break; ++ ++ default: ++ ReadWriteFLASHFileBlock(BlockNumber, BlockBuffer, true); ++ ReadWriteEEPROMFileBlock(BlockNumber, BlockBuffer, true); ++ ++ break; ++ } ++ ++ /* Write the entire read block Buffer to the host */ ++ Endpoint_Write_Stream_LE(BlockBuffer, sizeof(BlockBuffer), NULL); ++ Endpoint_ClearIN(); ++} diff --cc lib/lufa/Bootloaders/MassStorage/Lib/VirtualFAT.h index 000000000,000000000..ea80eae4d new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/MassStorage/Lib/VirtualFAT.h @@@ -1,0 -1,0 +1,302 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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. ++*/ ++ ++#ifndef _VIRTUALFAT_H_ ++#define _VIRTUALFAT_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/pgmspace.h> ++ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include "../BootloaderAPI.h" ++ ++ /* Macros: */ ++ /** Size of the virtual FLASH.BIN file in bytes. */ ++ #define FLASH_FILE_SIZE_BYTES (FLASHEND - (FLASHEND - BOOT_START_ADDR) - AUX_BOOT_SECTION_SIZE) ++ ++ /** Size of the virtual EEPROM.BIN file in bytes. */ ++ #define EEPROM_FILE_SIZE_BYTES E2END ++ ++ /** Number of sectors that comprise a single logical disk cluster. */ ++ #define SECTOR_PER_CLUSTER 4 ++ ++ /** Size of a single logical sector on the disk. */ ++ #define SECTOR_SIZE_BYTES 512 ++ ++ /** Size of a logical cluster on the disk, in bytes */ ++ #define CLUSTER_SIZE_BYTES (SECTOR_PER_CLUSTER * SECTOR_SIZE_BYTES) ++ ++ /** Number of sectors required to store a given size in bytes. ++ * ++ * \param[in] size Size of the data that needs to be stored ++ * ++ * \return Number of sectors required to store the given data on the disk. ++ */ ++ #define FILE_SECTORS(size) ((size / SECTOR_SIZE_BYTES) + ((size % SECTOR_SIZE_BYTES) ? 1 : 0)) ++ ++ /** Number of clusters required to store a given size in bytes. ++ * ++ * \param[in] size Size of the data that needs to be stored ++ * ++ * \return Number of clusters required to store the given data on the disk. ++ */ ++ #define FILE_CLUSTERS(size) ((size / CLUSTER_SIZE_BYTES) + ((size % CLUSTER_SIZE_BYTES) ? 1 : 0)) ++ ++ /** Total number of logical sectors/blocks on the disk. */ ++ #define LUN_MEDIA_BLOCKS (FILE_SECTORS(FLASH_FILE_SIZE_BYTES) + FILE_SECTORS(EEPROM_FILE_SIZE_BYTES) + 32) ++ ++ /** Converts a given time in HH:MM:SS format to a FAT filesystem time. ++ * ++ * \note The minimum seconds resolution of FAT is 2, thus odd seconds ++ * will be truncated to the previous integer multiple of 2 seconds. ++ * ++ * \param[in] hh Hours (0-23) ++ * \param[in] mm Minutes (0-59) ++ * \param[in] ss Seconds (0-59) ++ * ++ * \return Given time encoded as a FAT filesystem timestamp ++ */ ++ #define FAT_TIME(hh, mm, ss) ((hh << 11) | (mm << 5) | (ss >> 1)) ++ ++ /** Converts a given date in DD/MM/YYYY format to a FAT filesystem date. ++ * ++ * \param[in] dd Days in the month (1-31) ++ * \param[in] mm Months in the year (1-12) ++ * \param[in] yyyy Year (1980 - 2107) ++ * ++ * \return Given date encoded as a FAT filesystem datestamp ++ */ ++ #define FAT_DATE(dd, mm, yyyy) (((yyyy - 1980) << 9) | (mm << 5) | (dd << 0)) ++ ++ /** Bit-rotates a given 8-bit value once to the right. ++ * ++ * \param[in] x Value to rotate right once ++ * ++ * \return Bit-rotated input value, rotated once to the right. ++ */ ++ #define ROT8(x) ((((x) & 0xFE) >> 1) | (((x) & 1) ? 0x80 : 0x00)) ++ ++ /** Computes the LFN entry checksum of a MSDOS 8.3 format file entry, ++ * to associate a LFN entry with its short file entry. ++ * ++ * \param[in] n0 MSDOS Filename character 1 ++ * \param[in] n1 MSDOS Filename character 2 ++ * \param[in] n2 MSDOS Filename character 3 ++ * \param[in] n3 MSDOS Filename character 4 ++ * \param[in] n4 MSDOS Filename character 5 ++ * \param[in] n5 MSDOS Filename character 6 ++ * \param[in] n6 MSDOS Filename character 7 ++ * \param[in] n7 MSDOS Filename character 8 ++ * \param[in] e0 MSDOS Extension character 1 ++ * \param[in] e1 MSDOS Extension character 2 ++ * \param[in] e2 MSDOS Extension character 3 ++ * ++ * \return LFN checksum of the given MSDOS 8.3 filename. ++ */ ++ #define FAT_CHECKSUM(n0, n1, n2, n3, n4, n5, n6, n7, e0, e1, e2) \ ++ (uint8_t)(ROT8(ROT8(ROT8(ROT8(ROT8(ROT8(ROT8(ROT8(ROT8(ROT8(n0)+n1)+n2)+n3)+n4)+n5)+n6)+n7)+e0)+e1)+e2) ++ ++ /** \name FAT Filesystem Flags */ ++ //@{ ++ /** FAT attribute flag to indicate a read-only file. */ ++ #define FAT_FLAG_READONLY (1 << 0) ++ ++ /** FAT attribute flag to indicate a hidden file. */ ++ #define FAT_FLAG_HIDDEN (1 << 1) ++ ++ /** FAT attribute flag to indicate a system file. */ ++ #define FAT_FLAG_SYSTEM (1 << 2) ++ ++ /** FAT attribute flag to indicate a Volume name entry. */ ++ #define FAT_FLAG_VOLUME_NAME (1 << 3) ++ ++ /** FAT attribute flag to indicate a directory entry. */ ++ #define FAT_FLAG_DIRECTORY (1 << 4) ++ ++ /** FAT attribute flag to indicate a file ready for archiving. */ ++ #define FAT_FLAG_ARCHIVE (1 << 5) ++ ++ /** FAT pseudo-attribute flag to indicate a Long File Name entry. */ ++ #define FAT_FLAG_LONG_FILE_NAME 0x0F ++ ++ /** Ordinal flag marker for FAT Long File Name entries to mark the last entry. */ ++ #define FAT_ORDINAL_LAST_ENTRY (1 << 6) ++ //@} ++ ++ /* Enums: */ ++ /** Enum for the Root FAT file entry indexes on the disk. This can be used ++ * to retrieve the current contents of a known directory entry. ++ */ ++ enum ++ { ++ /** Volume ID directory entry, giving the name of the virtual disk. */ ++ DISK_FILE_ENTRY_VolumeID = 0, ++ /** Long File Name FAT file entry of the virtual FLASH.BIN image file. */ ++ DISK_FILE_ENTRY_FLASH_LFN = 1, ++ /** Legacy MSDOS FAT file entry of the virtual FLASH.BIN image file. */ ++ DISK_FILE_ENTRY_FLASH_MSDOS = 2, ++ /** Long File Name FAT file entry of the virtual EEPROM.BIN image file. */ ++ DISK_FILE_ENTRY_EEPROM_LFN = 3, ++ /** Legacy MSDOS FAT file entry of the virtual EEPROM.BIN image file. */ ++ DISK_FILE_ENTRY_EEPROM_MSDOS = 4, ++ }; ++ ++ /** Enum for the physical disk blocks of the virtual disk. */ ++ enum ++ { ++ /** Boot sector disk block. */ ++ DISK_BLOCK_BootBlock = 0, ++ /** First copy of the FAT table block. */ ++ DISK_BLOCK_FATBlock1 = 1, ++ /** Second copy of the FAT table block. */ ++ DISK_BLOCK_FATBlock2 = 2, ++ /** Root file and directory entries block. */ ++ DISK_BLOCK_RootFilesBlock = 3, ++ /** Start block of the disk data section. */ ++ DISK_BLOCK_DataStartBlock = 4, ++ }; ++ ++ /* Type Definitions: */ ++ /** FAT boot block structure definition, used to identify the core ++ * parameters of a FAT file system stored on a disk. ++ * ++ * \note This definition is truncated to save space; the magic signature ++ * \c 0xAA55 must be appended to the very end of the block for it ++ * to be detected by the host as a valid boot block. ++ */ ++ typedef struct ++ { ++ uint8_t Bootstrap[3]; ++ uint8_t Description[8]; ++ uint16_t SectorSize; ++ uint8_t SectorsPerCluster; ++ uint16_t ReservedSectors; ++ uint8_t FATCopies; ++ uint16_t RootDirectoryEntries; ++ uint16_t TotalSectors16; ++ uint8_t MediaDescriptor; ++ uint16_t SectorsPerFAT; ++ uint16_t SectorsPerTrack; ++ uint16_t Heads; ++ uint32_t HiddenSectors; ++ uint32_t TotalSectors32; ++ uint16_t PhysicalDriveNum; ++ uint8_t ExtendedBootRecordSig; ++ uint32_t VolumeSerialNumber; ++ uint8_t VolumeLabel[11]; ++ uint8_t FilesystemIdentifier[8]; ++ /* uint8_t BootstrapProgram[448]; */ ++ /* uint16_t MagicSignature; */ ++ } FATBootBlock_t; ++ ++ /** FAT directory entry structure, for the various kinds of File and ++ * directory descriptors on a FAT disk. ++ */ ++ typedef union ++ { ++ /** VFAT Long File Name file entry. */ ++ struct ++ { ++ uint8_t Ordinal; ++ uint16_t Unicode1; ++ uint16_t Unicode2; ++ uint16_t Unicode3; ++ uint16_t Unicode4; ++ uint16_t Unicode5; ++ uint8_t Attribute; ++ uint8_t Reserved1; ++ uint8_t Checksum; ++ uint16_t Unicode6; ++ uint16_t Unicode7; ++ uint16_t Unicode8; ++ uint16_t Unicode9; ++ uint16_t Unicode10; ++ uint16_t Unicode11; ++ uint16_t Reserved2; ++ uint16_t Unicode12; ++ uint16_t Unicode13; ++ } VFAT_LongFileName; ++ ++ /** Legacy FAT MSDOS 8.3 file entry. */ ++ struct ++ { ++ uint8_t Filename[8]; ++ uint8_t Extension[3]; ++ uint8_t Attributes; ++ uint8_t Reserved[10]; ++ uint16_t CreationTime; ++ uint16_t CreationDate; ++ uint16_t StartingCluster; ++ uint32_t FileSizeBytes; ++ } MSDOS_File; ++ ++ /** Legacy FAT MSDOS (sub-)directory entry. */ ++ struct ++ { ++ uint8_t Name[11]; ++ uint8_t Attributes; ++ uint8_t Reserved[10]; ++ uint16_t CreationTime; ++ uint16_t CreationDate; ++ uint16_t StartingCluster; ++ uint32_t Reserved2; ++ } MSDOS_Directory; ++ } FATDirectoryEntry_t; ++ ++ /* Function Prototypes: */ ++ #if defined(INCLUDE_FROM_VIRTUAL_FAT_C) ++ static uint8_t ReadEEPROMByte(const uint8_t* const Address) ATTR_NO_INLINE; ++ ++ static void WriteEEPROMByte(uint8_t* const Address, ++ const uint8_t Data) ATTR_NO_INLINE; ++ ++ static void UpdateFAT12ClusterEntry(uint8_t* const FATTable, ++ const uint16_t Index, ++ const uint16_t ChainEntry) AUX_BOOT_SECTION; ++ ++ static void UpdateFAT12ClusterChain(uint8_t* const FATTable, ++ const uint16_t StartIndex, ++ const uint8_t ChainLength) AUX_BOOT_SECTION; ++ ++ static void ReadWriteFLASHFileBlock(const uint16_t BlockNumber, ++ uint8_t* BlockBuffer, ++ const bool Read) AUX_BOOT_SECTION; ++ ++ static void ReadWriteEEPROMFileBlock(const uint16_t BlockNumber, ++ uint8_t* BlockBuffer, ++ const bool Read) AUX_BOOT_SECTION; ++ #endif ++ ++ void VirtualFAT_WriteBlock(const uint16_t BlockNumber) AUX_BOOT_SECTION; ++ void VirtualFAT_ReadBlock(const uint16_t BlockNumber) AUX_BOOT_SECTION; ++ ++#endif diff --cc lib/lufa/Bootloaders/MassStorage/asf.xml index 000000000,000000000..f1d550d1e new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/MassStorage/asf.xml @@@ -1,0 -1,0 +1,156 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Mass Storage Bootloader - 128KB FLASH / 8KB Boot - AVR8 Architecture" id="lufa.bootloaders.mass_storage.avr8.128_8" force-caption="true" workspace-name="lufa_ms_128kb_8kb_"> ++ <require idref="lufa.bootloaders.mass_storage"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <config name="config.compiler.optimization.level" value="size"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ ++ <build type="define" name="BOOT_START_ADDR" value="0x1E000"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.text=0x1E000"/> ++ ++ <build type="define" name="AUX_BOOT_SECTION_SIZE" value="0"/> ++ ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FFA0"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FFE0"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FFF8"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/> ++ </project> ++ ++ <project caption="Mass Storage Bootloader - 64KB FLASH / 8KB Boot - AVR8 Architecture" id="lufa.bootloaders.mass_storage.avr8.64_8" force-caption="true" workspace-name="lufa_ms_64kb_8kb_"> ++ <require idref="lufa.bootloaders.mass_storage"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb647"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <config name="config.compiler.optimization.level" value="size"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ ++ <build type="define" name="BOOT_START_ADDR" value="0xE000"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.text=0xE000"/> ++ ++ <build type="define" name="AUX_BOOT_SECTION_SIZE" value="0"/> ++ ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0xFFA0"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0xFFE0"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0xFFF8"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/> ++ </project> ++ ++ <project caption="Mass Storage Bootloader - 32KB FLASH / 4KB Boot (2KB AUX) - AVR8 Architecture" id="lufa.bootloaders.mass_storage.avr8.32_4" force-caption="true" workspace-name="lufa_ms_32kb_4kb_"> ++ <require idref="lufa.bootloaders.mass_storage"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atmega32u4"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <config name="config.compiler.optimization.level" value="size"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ ++ <build type="define" name="BOOT_START_ADDR" value="0x7000"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/> ++ ++ <build type="define" name="AUX_BOOT_SECTION_SIZE" value="2048"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.boot_aux=0x6810"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.boot_aux_trampoline=0x6800"/> ++ <build type="linker-config" subtype="flags" value="--undefined=Boot_AUX_Trampoline"/> ++ ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x7FA0"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x7FE0"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x7FF8"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/> ++ </project> ++ ++ <project caption="Mass Storage Bootloader - 16KB FLASH / 4KB Boot (2KB AUX) - AVR8 Architecture" id="lufa.bootloaders.mass_storage.avr8.16_4" force-caption="true" workspace-name="lufa_ms_16kb_4kb_"> ++ <require idref="lufa.bootloaders.mass_storage"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atmega16u2"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <config name="config.compiler.optimization.level" value="size"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ ++ <build type="define" name="BOOT_START_ADDR" value="0x3000"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.text=0x3000"/> ++ ++ <build type="define" name="AUX_BOOT_SECTION_SIZE" value="2048"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.boot_aux=0x2810"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.boot_aux_trampoline=0x2800"/> ++ <build type="linker-config" subtype="flags" value="--undefined=Boot_AUX_Trampoline"/> ++ ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x3FA0"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x3FE0"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x3FF8"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/> ++ </project> ++ ++ <module type="application" id="lufa.bootloaders.mass_storage" caption="Mass Storage Bootloader"> ++ <info type="description" value="summary"> ++ Mass Storage Class Bootloader, capable of reprogramming a device via binary BIN files copied to the virtual FAT12 file-system it creates when plugged into a host. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Bootloaders"/> ++ <keyword value="USB Device"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="include-path" value="."/> ++ <build type="c-source" value="BootloaderMassStorage.c"/> ++ <build type="header-file" value="BootloaderMassStorage.h"/> ++ <build type="c-source" value="Descriptors.c"/> ++ <build type="header-file" value="Descriptors.h"/> ++ <build type="c-source" value="BootloaderAPI.c"/> ++ <build type="header-file" value="BootloaderAPI.h"/> ++ <build type="asm-source" value="BootloaderAPITable.S"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ <build type="header-file" value="Config/AppConfig.h"/> ++ ++ <build type="include-path" value="Lib"/> ++ <build type="header-file" value="Lib/VirtualFAT.h"/> ++ <build type="c-source" value="Lib/VirtualFAT.c"/> ++ <build type="header-file" value="Lib/SCSI.h"/> ++ <build type="c-source" value="Lib/SCSI.c"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="BootloaderMassStorage.txt"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ </module> ++</asf> diff --cc lib/lufa/Bootloaders/MassStorage/doxyfile index 000000000,000000000..795c6e81a new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/MassStorage/doxyfile @@@ -1,0 -1,0 +1,2396 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Mass Storage Class Bootloader" ++ ++# The PROJECT_NUMBER tag can be used to enter a project or revision number. This ++# could be handy for archiving the generated documentation or if some version ++# control system is used. ++ ++PROJECT_NUMBER = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM \ ++ ATTR_NO_INIT ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Bootloaders/MassStorage/makefile index 000000000,000000000..7f0ec82a7 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/MassStorage/makefile @@@ -1,0 -1,0 +1,75 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = BootloaderMassStorage ++SRC = $(TARGET).c Descriptors.c BootloaderAPI.c BootloaderAPITable.S Lib/SCSI.c Lib/VirtualFAT.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) ++LUFA_PATH = ../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ -DBOOT_START_ADDR=$(BOOT_START_OFFSET) ++LD_FLAGS = -Wl,--section-start=.text=$(BOOT_START_OFFSET) $(BOOT_API_LD_FLAGS) ++ ++# Flash size and bootloader section sizes of the target, in KB. These must ++# match the target's total FLASH size and the bootloader size set in the ++# device's fuses. ++FLASH_SIZE_KB = 128 ++BOOT_SECTION_SIZE_KB = 8 ++ ++# Bootloader address calculation formulas ++# Do not modify these macros, but rather modify the dependent values above. ++CALC_ADDRESS_IN_HEX = $(shell printf "0x%X" $$(( $(1) )) ) ++BOOT_START_OFFSET = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024 ) ++BOOT_SEC_OFFSET = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) * 1024) - ($(strip $(1))) ) ++ ++# Bootloader linker section flags for relocating the API table sections to ++# known FLASH addresses - these should not normally be user-edited. ++BOOT_SECTION_LD_FLAG = -Wl,--section-start=$(strip $(1))=$(call BOOT_SEC_OFFSET, $(3)) -Wl,--undefined=$(strip $(2)) ++BOOT_API_LD_FLAGS = $(call BOOT_SECTION_LD_FLAG, .apitable_trampolines, BootloaderAPI_Trampolines, 96) ++BOOT_API_LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .apitable_jumptable, BootloaderAPI_JumpTable, 32) ++BOOT_API_LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .apitable_signatures, BootloaderAPI_Signatures, 8) ++ ++# Check if the bootloader needs an AUX section, located before the real bootloader section to store some of the ++# bootloader code. This is required for 32KB and smaller devices, where the actual bootloader is 6KB but the maximum ++# bootloader section size is 4KB. The actual usable application space will be reduced by 6KB for these devices. ++ifeq ($(BOOT_SECTION_SIZE_KB),8) ++ CC_FLAGS += -DAUX_BOOT_SECTION_SIZE=0 ++else ++ AUX_BOOT_SECTION_SIZE_KB = (6 - $(BOOT_SECTION_SIZE_KB)) ++ ++ CC_FLAGS += -DAUX_BOOT_SECTION_SIZE='($(AUX_BOOT_SECTION_SIZE_KB) * 1024)' ++ LD_FLAGS += -Wl,--section-start=.boot_aux=$(call BOOT_SEC_OFFSET, (($(BOOT_SECTION_SIZE_KB) + $(AUX_BOOT_SECTION_SIZE_KB)) * 1024 - 16)) ++ LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .boot_aux_trampoline, Boot_AUX_Trampoline, ($(BOOT_SECTION_SIZE_KB) + $(AUX_BOOT_SECTION_SIZE_KB)) * 1024) ++endif ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Bootloaders/Printer/BootloaderAPI.c index 000000000,000000000..2be156808 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/Printer/BootloaderAPI.c @@@ -1,0 -1,0 +1,75 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * Bootloader user application API functions. ++ */ ++ ++#include "BootloaderAPI.h" ++ ++void BootloaderAPI_ErasePage(const uint32_t Address) ++{ ++ boot_page_erase_safe(Address); ++ boot_spm_busy_wait(); ++ boot_rww_enable(); ++} ++ ++void BootloaderAPI_WritePage(const uint32_t Address) ++{ ++ boot_page_write_safe(Address); ++ boot_spm_busy_wait(); ++ boot_rww_enable(); ++} ++ ++void BootloaderAPI_FillWord(const uint32_t Address, const uint16_t Word) ++{ ++ boot_page_fill_safe(Address, Word); ++} ++ ++uint8_t BootloaderAPI_ReadSignature(const uint16_t Address) ++{ ++ return boot_signature_byte_get(Address); ++} ++ ++uint8_t BootloaderAPI_ReadFuse(const uint16_t Address) ++{ ++ return boot_lock_fuse_bits_get(Address); ++} ++ ++uint8_t BootloaderAPI_ReadLock(void) ++{ ++ return boot_lock_fuse_bits_get(GET_LOCK_BITS); ++} ++ ++void BootloaderAPI_WriteLock(const uint8_t LockBits) ++{ ++ boot_lock_bits_set_safe(LockBits); ++} diff --cc lib/lufa/Bootloaders/Printer/BootloaderAPI.h index 000000000,000000000..c2d9b4a18 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/Printer/BootloaderAPI.h @@@ -1,0 -1,0 +1,56 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 BootloaderAPI.c. ++ */ ++ ++#ifndef _BOOTLOADER_API_H_ ++#define _BOOTLOADER_API_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/boot.h> ++ #include <stdbool.h> ++ ++ #include <LUFA/Common/Common.h> ++ ++ /* Function Prototypes: */ ++ void BootloaderAPI_ErasePage(const uint32_t Address); ++ void BootloaderAPI_WritePage(const uint32_t Address); ++ void BootloaderAPI_FillWord(const uint32_t Address, const uint16_t Word); ++ uint8_t BootloaderAPI_ReadSignature(const uint16_t Address); ++ uint8_t BootloaderAPI_ReadFuse(const uint16_t Address); ++ uint8_t BootloaderAPI_ReadLock(void); ++ void BootloaderAPI_WriteLock(const uint8_t LockBits); ++ ++#endif ++ diff --cc lib/lufa/Bootloaders/Printer/BootloaderAPITable.S index 000000000,000000000..76f37bf49 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/Printer/BootloaderAPITable.S @@@ -1,0 -1,0 +1,91 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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. ++*/ ++ ++; Trampolines to actual API implementations if the target address is outside the ++; range of a rjmp instruction (can happen with large bootloader sections) ++.section .apitable_trampolines, "ax" ++.global BootloaderAPI_Trampolines ++BootloaderAPI_Trampolines: ++ ++ BootloaderAPI_ErasePage_Trampoline: ++ jmp BootloaderAPI_ErasePage ++ BootloaderAPI_WritePage_Trampoline: ++ jmp BootloaderAPI_WritePage ++ BootloaderAPI_FillWord_Trampoline: ++ jmp BootloaderAPI_FillWord ++ BootloaderAPI_ReadSignature_Trampoline: ++ jmp BootloaderAPI_ReadSignature ++ BootloaderAPI_ReadFuse_Trampoline: ++ jmp BootloaderAPI_ReadFuse ++ BootloaderAPI_ReadLock_Trampoline: ++ jmp BootloaderAPI_ReadLock ++ BootloaderAPI_WriteLock_Trampoline: ++ jmp BootloaderAPI_WriteLock ++ BootloaderAPI_UNUSED1: ++ ret ++ BootloaderAPI_UNUSED2: ++ ret ++ BootloaderAPI_UNUSED3: ++ ret ++ BootloaderAPI_UNUSED4: ++ ret ++ BootloaderAPI_UNUSED5: ++ ret ++ ++ ++ ++; API function jump table ++.section .apitable_jumptable, "ax" ++.global BootloaderAPI_JumpTable ++BootloaderAPI_JumpTable: ++ ++ rjmp BootloaderAPI_ErasePage_Trampoline ++ rjmp BootloaderAPI_WritePage_Trampoline ++ rjmp BootloaderAPI_FillWord_Trampoline ++ rjmp BootloaderAPI_ReadSignature_Trampoline ++ rjmp BootloaderAPI_ReadFuse_Trampoline ++ rjmp BootloaderAPI_ReadLock_Trampoline ++ rjmp BootloaderAPI_WriteLock_Trampoline ++ rjmp BootloaderAPI_UNUSED1 ; UNUSED ENTRY 1 ++ rjmp BootloaderAPI_UNUSED2 ; UNUSED ENTRY 2 ++ rjmp BootloaderAPI_UNUSED3 ; UNUSED ENTRY 3 ++ rjmp BootloaderAPI_UNUSED4 ; UNUSED ENTRY 4 ++ rjmp BootloaderAPI_UNUSED5 ; UNUSED ENTRY 5 ++ ++ ++ ++; Bootloader table signatures and information ++.section .apitable_signatures, "ax" ++.global BootloaderAPI_Signatures ++BootloaderAPI_Signatures: ++ ++ .long BOOT_START_ADDR ; Start address of the bootloader ++ .word 0xDF20 ; Signature for the Printer class bootloader ++ .word 0xDCFB ; Signature for a LUFA class bootloader diff --cc lib/lufa/Bootloaders/Printer/BootloaderPrinter.c index 000000000,000000000..9021f998f new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/Printer/BootloaderPrinter.c @@@ -1,0 -1,0 +1,487 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 Printer class bootloader. This file contains the complete bootloader logic. ++ */ ++ ++#include "BootloaderPrinter.h" ++ ++/** LUFA Printer Class driver interface configuration and state information. This structure is ++ * passed to all Printer Class driver functions, so that multiple instances of the same class ++ * within a device can be differentiated from one another. ++ */ ++USB_ClassInfo_PRNT_Device_t TextOnly_Printer_Interface = ++ { ++ .Config = ++ { ++ .InterfaceNumber = INTERFACE_ID_Printer, ++ .DataINEndpoint = ++ { ++ .Address = PRINTER_IN_EPADDR, ++ .Size = PRINTER_IO_EPSIZE, ++ .Banks = 1, ++ }, ++ .DataOUTEndpoint = ++ { ++ .Address = PRINTER_OUT_EPADDR, ++ .Size = PRINTER_IO_EPSIZE, ++ .Banks = 1, ++ }, ++ .IEEE1284String = ++ "MFG:Generic;" ++ "MDL:Generic_/_Text_Only;" ++ "CMD:1284.4;" ++ "CLS:PRINTER", ++ }, ++ }; ++ ++/** Intel HEX parser state machine state information, to track the contents of ++ * a HEX file streamed in as a sequence of arbitrary bytes. ++ */ ++struct ++{ ++ /** Current HEX parser state machine state. */ ++ uint8_t ParserState; ++ /** Previously decoded numerical byte of data. */ ++ uint8_t PrevData; ++ /** Currently decoded numerical byte of data. */ ++ uint8_t Data; ++ /** Indicates if both bytes that correspond to a single decoded numerical ++ * byte of data (HEX encodes values in ASCII HEX, two characters per byte) ++ * have been read. ++ */ ++ bool ReadMSB; ++ /** Intel HEX record type of the current Intel HEX record. */ ++ uint8_t RecordType; ++ /** Numerical bytes of data remaining to be read in the current record. */ ++ uint8_t DataRem; ++ /** Checksum of the current record received so far. */ ++ uint8_t Checksum; ++ /** Starting address of the last addressed FLASH page. */ ++ uint32_t PageStartAddress; ++ /** Current 32-bit byte extended base address in FLASH being targeted. */ ++ uint32_t CurrBaseAddress; ++ /** Current 32-bit byte address in FLASH being targeted. */ ++ uint32_t CurrAddress; ++} HEXParser; ++ ++/** Indicates if there is data waiting to be written to a physical page of ++ * memory in FLASH. ++ */ ++static bool PageDirty = false; ++ ++/** Flag to indicate if the bootloader should be running, or should exit and allow the application code to run ++ * via a soft reset. When cleared, the bootloader will abort, the USB interface will shut down and the application ++ * started via a forced watchdog reset. ++ */ ++static bool RunBootloader = true; ++ ++/** Magic lock for forced application start. If the HWBE fuse is programmed and BOOTRST is unprogrammed, the bootloader ++ * will start if the /HWB line of the AVR is held low and the system is reset. However, if the /HWB line is still held ++ * low when the application attempts to start via a watchdog reset, the bootloader will re-start. If set to the value ++ * \ref MAGIC_BOOT_KEY the special init function \ref Application_Jump_Check() will force the application to start. ++ */ ++uint16_t MagicBootKey ATTR_NO_INIT; ++ ++ ++/** Special startup routine to check if the bootloader was started via a watchdog reset, and if the magic application ++ * start key has been loaded into \ref MagicBootKey. If the bootloader started via the watchdog and the key is valid, ++ * this will force the user application to start via a software jump. ++ */ ++void Application_Jump_Check(void) ++{ ++ bool JumpToApplication = false; ++ ++ #if (BOARD == BOARD_LEONARDO) ++ /* Enable pull-up on the IO13 pin so we can use it to select the mode */ ++ PORTC |= (1 << 7); ++ Delay_MS(10); ++ ++ /* If IO13 is not jumpered to ground, start the user application instead */ ++ JumpToApplication = ((PINC & (1 << 7)) != 0); ++ ++ /* Disable pull-up after the check has completed */ ++ PORTC &= ~(1 << 7); ++ #elif ((BOARD == BOARD_XPLAIN) || (BOARD == BOARD_XPLAIN_REV1)) ++ /* Disable JTAG debugging */ ++ JTAG_DISABLE(); ++ ++ /* Enable pull-up on the JTAG TCK pin so we can use it to select the mode */ ++ PORTF |= (1 << 4); ++ Delay_MS(10); ++ ++ /* If the TCK pin is not jumpered to ground, start the user application instead */ ++ JumpToApplication = ((PINF & (1 << 4)) != 0); ++ ++ /* Re-enable JTAG debugging */ ++ JTAG_ENABLE(); ++ #else ++ /* Check if the device's BOOTRST fuse is set */ ++ if (boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS) & FUSE_BOOTRST) ++ { ++ /* If the reset source was not an external reset or the key is correct, clear it and jump to the application */ ++ if (!(MCUSR & (1 << EXTRF)) || (MagicBootKey == MAGIC_BOOT_KEY)) ++ JumpToApplication = true; ++ ++ /* Clear reset source */ ++ MCUSR &= ~(1 << EXTRF); ++ } ++ else ++ { ++ /* If the reset source was the bootloader and the key is correct, clear it and jump to the application; ++ * this can happen in the HWBE fuse is set, and the HBE pin is low during the watchdog reset */ ++ if ((MCUSR & (1 << WDRF)) && (MagicBootKey == MAGIC_BOOT_KEY)) ++ JumpToApplication = true; ++ ++ /* Clear reset source */ ++ MCUSR &= ~(1 << WDRF); ++ } ++ #endif ++ ++ /* Don't run the user application if the reset vector is blank (no app loaded) */ ++ bool ApplicationValid = (pgm_read_word_near(0) != 0xFFFF); ++ ++ /* If a request has been made to jump to the user application, honor it */ ++ if (JumpToApplication && ApplicationValid) ++ { ++ /* Turn off the watchdog */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Clear the boot key and jump to the user application */ ++ MagicBootKey = 0; ++ ++ // cppcheck-suppress constStatement ++ ((void (*)(void))0x0000)(); ++ } ++} ++ ++/** ++ * Converts a given input byte of data from an ASCII encoded HEX value to an integer value. ++ * ++ * \note Input HEX bytes are expected to be in uppercase only. ++ * ++ * \param[in] Byte ASCII byte of data to convert ++ * ++ * \return Integer converted value of the input ASCII encoded HEX byte of data, or -1 if the ++ * input is not valid ASCII encoded HEX. ++ */ ++static int8_t HexToDecimal(const char Byte) ++{ ++ if ((Byte >= 'A') && (Byte <= 'F')) ++ return (10 + (Byte - 'A')); ++ else if ((Byte >= '0') && (Byte <= '9')) ++ return (Byte - '0'); ++ ++ return -1; ++} ++ ++/** ++ * Flushes a partially written page of data to physical FLASH, if a page ++ * boundary has been crossed. ++ * ++ * \note If a page flush occurs the global HEX parser state is updated. ++ */ ++static void FlushPageIfRequired(void) ++{ ++ /* Abort if no data has been buffered for writing to the current page */ ++ if (!PageDirty) ++ return; ++ ++ /* Flush the FLASH page to physical memory if we are crossing a page boundary */ ++ uint32_t NewPageStartAddress = (HEXParser.CurrAddress & ~(SPM_PAGESIZE - 1)); ++ if (HEXParser.PageStartAddress != NewPageStartAddress) ++ { ++ boot_page_write(HEXParser.PageStartAddress); ++ boot_spm_busy_wait(); ++ ++ HEXParser.PageStartAddress = NewPageStartAddress; ++ ++ PageDirty = false; ++ } ++} ++ ++/** ++ * Parses an input Intel HEX formatted stream one character at a time, loading ++ * the data contents into the device's internal FLASH memory. ++ * ++ * \param[in] ReadCharacter Next input ASCII byte of data to parse ++ */ ++static void ParseIntelHEXByte(const char ReadCharacter) ++{ ++ /* Reset the line parser while waiting for a new line to start */ ++ if ((HEXParser.ParserState == HEX_PARSE_STATE_WAIT_LINE) || (ReadCharacter == ':')) ++ { ++ HEXParser.Checksum = 0; ++ HEXParser.CurrAddress = HEXParser.CurrBaseAddress; ++ HEXParser.ReadMSB = false; ++ ++ /* ASCII ':' indicates the start of a new HEX record */ ++ if (ReadCharacter == ':') ++ HEXParser.ParserState = HEX_PARSE_STATE_BYTE_COUNT; ++ ++ return; ++ } ++ ++ /* Only allow ASCII HEX encoded digits, ignore all other characters */ ++ int8_t ReadCharacterDec = HexToDecimal(ReadCharacter); ++ if (ReadCharacterDec < 0) ++ return; ++ ++ /* Read and convert the next nibble of data from the current character */ ++ HEXParser.Data = (HEXParser.Data << 4) | ReadCharacterDec; ++ HEXParser.ReadMSB = !HEXParser.ReadMSB; ++ ++ /* Only process further when a full byte (two nibbles) have been read */ ++ if (HEXParser.ReadMSB) ++ return; ++ ++ /* Intel HEX checksum is for all fields except starting character and the ++ * checksum itself ++ */ ++ if (HEXParser.ParserState != HEX_PARSE_STATE_CHECKSUM) ++ HEXParser.Checksum += HEXParser.Data; ++ ++ switch (HEXParser.ParserState) ++ { ++ case HEX_PARSE_STATE_BYTE_COUNT: ++ HEXParser.DataRem = HEXParser.Data; ++ HEXParser.ParserState = HEX_PARSE_STATE_ADDRESS_HIGH; ++ break; ++ ++ case HEX_PARSE_STATE_ADDRESS_HIGH: ++ HEXParser.CurrAddress += ((uint16_t)HEXParser.Data << 8); ++ HEXParser.ParserState = HEX_PARSE_STATE_ADDRESS_LOW; ++ break; ++ ++ case HEX_PARSE_STATE_ADDRESS_LOW: ++ HEXParser.CurrAddress += HEXParser.Data; ++ HEXParser.ParserState = HEX_PARSE_STATE_RECORD_TYPE; ++ break; ++ ++ case HEX_PARSE_STATE_RECORD_TYPE: ++ HEXParser.RecordType = HEXParser.Data; ++ HEXParser.ParserState = (HEXParser.DataRem ? HEX_PARSE_STATE_READ_DATA : HEX_PARSE_STATE_CHECKSUM); ++ break; ++ ++ case HEX_PARSE_STATE_READ_DATA: ++ /* Track the number of read data bytes in the record */ ++ HEXParser.DataRem--; ++ ++ /* Protect the bootloader against being written to */ ++ if (HEXParser.CurrAddress >= BOOT_START_ADDR) ++ { ++ HEXParser.ParserState = HEX_PARSE_STATE_WAIT_LINE; ++ PageDirty = false; ++ return; ++ } ++ ++ /* Wait for a machine word (two bytes) of data to be read */ ++ if (HEXParser.DataRem & 0x01) ++ { ++ HEXParser.PrevData = HEXParser.Data; ++ break; ++ } ++ ++ /* Convert the last two received data bytes into a 16-bit word */ ++ uint16_t NewDataWord = ((uint16_t)HEXParser.Data << 8) | HEXParser.PrevData; ++ ++ switch (HEXParser.RecordType) ++ { ++ case HEX_RECORD_TYPE_Data: ++ /* If we are writing to a new page, we need to erase it first */ ++ if (!(PageDirty)) ++ { ++ boot_page_erase(HEXParser.PageStartAddress); ++ boot_spm_busy_wait(); ++ ++ PageDirty = true; ++ } ++ ++ /* Fill the FLASH memory buffer with the new word of data */ ++ boot_page_fill(HEXParser.CurrAddress, NewDataWord); ++ HEXParser.CurrAddress += 2; ++ ++ /* Flush the FLASH page to physical memory if we are crossing a page boundary */ ++ FlushPageIfRequired(); ++ break; ++ ++ case HEX_RECORD_TYPE_ExtendedSegmentAddress: ++ /* Extended address data - store the upper 12-bits of the new address */ ++ HEXParser.CurrBaseAddress = ((uint32_t)NewDataWord << 4); ++ break; ++ ++ case HEX_RECORD_TYPE_ExtendedLinearAddress: ++ /* Extended address data - store the upper 16-bits of the new address */ ++ HEXParser.CurrBaseAddress = ((uint32_t)NewDataWord << 16); ++ break; ++ } ++ ++ if (!HEXParser.DataRem) ++ HEXParser.ParserState = HEX_PARSE_STATE_CHECKSUM; ++ break; ++ ++ case HEX_PARSE_STATE_CHECKSUM: ++ /* Verify checksum of the completed record */ ++ if (HEXParser.Data != ((~HEXParser.Checksum + 1) & 0xFF)) ++ break; ++ ++ /* Flush the FLASH page to physical memory if we are crossing a page boundary */ ++ FlushPageIfRequired(); ++ ++ /* If end of the HEX file reached, the bootloader should exit at next opportunity */ ++ if (HEXParser.RecordType == HEX_RECORD_TYPE_EndOfFile) ++ RunBootloader = false; ++ ++ break; ++ ++ default: ++ HEXParser.ParserState = HEX_PARSE_STATE_WAIT_LINE; ++ break; ++ } ++} ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ while (RunBootloader) ++ { ++ uint8_t BytesReceived = PRNT_Device_BytesReceived(&TextOnly_Printer_Interface); ++ ++ if (BytesReceived) ++ { ++ LEDs_SetAllLEDs(LEDMASK_USB_BUSY); ++ ++ while (BytesReceived--) ++ { ++ int16_t ReceivedByte = PRNT_Device_ReceiveByte(&TextOnly_Printer_Interface); ++ ++ /* Feed the next byte of data to the HEX parser */ ++ ParseIntelHEXByte(ReceivedByte); ++ } ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++ } ++ ++ PRNT_Device_USBTask(&TextOnly_Printer_Interface); ++ USB_USBTask(); ++ } ++ ++ /* Disconnect from the host - USB interface will be reset later along with the AVR */ ++ USB_Detach(); ++ ++ /* Unlock the forced application start mode of the bootloader if it is restarted */ ++ MagicBootKey = MAGIC_BOOT_KEY; ++ ++ /* Enable the watchdog and force a timeout to reset the AVR */ ++ wdt_enable(WDTO_250MS); ++ ++ for (;;); ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++static void SetupHardware(void) ++{ ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++ ++ /* Relocate the interrupt vector table to the bootloader section */ ++ MCUCR = (1 << IVCE); ++ MCUCR = (1 << IVSEL); ++ ++ /* Hardware Initialization */ ++ LEDs_Init(); ++ USB_Init(); ++ ++ /* Bootloader active LED toggle timer initialization */ ++ TIMSK1 = (1 << TOIE1); ++ TCCR1B = ((1 << CS11) | (1 << CS10)); ++} ++ ++/** ISR to periodically toggle the LEDs on the board to indicate that the bootloader is active. */ ++ISR(TIMER1_OVF_vect, ISR_BLOCK) ++{ ++ LEDs_ToggleLEDs(LEDS_LED1 | LEDS_LED2); ++} ++ ++/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs. */ ++void EVENT_USB_Device_Connect(void) ++{ ++ /* Indicate USB enumerating */ ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via ++ * the status LEDs and stops the Printer management task. ++ */ ++void EVENT_USB_Device_Disconnect(void) ++{ ++ /* Indicate USB not ready */ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration ++ * of the USB device after enumeration - the device endpoints are configured and the Mass Storage management task started. ++ */ ++void EVENT_USB_Device_ConfigurationChanged(void) ++{ ++ bool ConfigSuccess = true; ++ ++ /* Setup Printer Data Endpoints */ ++ ConfigSuccess &= PRNT_Device_ConfigureEndpoints(&TextOnly_Printer_Interface); ++ ++ /* Reset the HEX parser upon successful connection to a host */ ++ HEXParser.ParserState = HEX_PARSE_STATE_WAIT_LINE; ++ ++ /* Indicate endpoint configuration success or failure */ ++ LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); ++} ++ ++/** Event handler for the USB_ControlRequest event. This is used to catch and process control requests sent to ++ * the device from the USB host before passing along unhandled control requests to the library for processing ++ * internally. ++ */ ++void EVENT_USB_Device_ControlRequest(void) ++{ ++ PRNT_Device_ProcessControlRequest(&TextOnly_Printer_Interface); ++} diff --cc lib/lufa/Bootloaders/Printer/BootloaderPrinter.h index 000000000,000000000..8bc1a6879 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/Printer/BootloaderPrinter.h @@@ -1,0 -1,0 +1,108 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 BootloaderPrinter.c. ++ */ ++ ++#ifndef _BOOTLOADER_PRINTER_H_ ++#define _BOOTLOADER_PRINTER_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ ++ #include "Descriptors.h" ++ ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Platform/Platform.h> ++ ++ /* Preprocessor Checks: */ ++ #if !defined(__OPTIMIZE_SIZE__) ++ #error This bootloader requires that it be optimized for size, not speed, to fit into the target device. Change optimization settings and try again. ++ #endif ++ ++ /* 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) ++ ++ /** LED mask for the library LED driver, to indicate that the USB interface is busy. */ ++ #define LEDMASK_USB_BUSY LEDS_LED2 ++ ++ /** Magic bootloader key to unlock forced application start mode. */ ++ #define MAGIC_BOOT_KEY 0xDC42 ++ ++ /* Enums: */ ++ /** Intel HEX parser state machine states. */ ++ enum HEX_Parser_States_t ++ { ++ HEX_PARSE_STATE_WAIT_LINE, /**< Parser is waiting for a HEX Start of Line character. */ ++ HEX_PARSE_STATE_BYTE_COUNT, /**< Parser is waiting for a record byte count. */ ++ HEX_PARSE_STATE_ADDRESS_HIGH, /**< Parser is waiting for the MSB of a record address. */ ++ HEX_PARSE_STATE_ADDRESS_LOW, /**< Parser is waiting for the LSB of a record address. */ ++ HEX_PARSE_STATE_RECORD_TYPE, /**< Parser is waiting for the record type. */ ++ HEX_PARSE_STATE_READ_DATA, /**< Parser is waiting for more data in the current record. */ ++ HEX_PARSE_STATE_CHECKSUM, /**< Parser is waiting for the checksum of the current record. */ ++ }; ++ ++ /** Intel HEX record types, used to indicate the type of record contained in a line of a HEX file. */ ++ enum HEX_Record_Types_t ++ { ++ HEX_RECORD_TYPE_Data = 0, /**< Record contains loadable data. */ ++ HEX_RECORD_TYPE_EndOfFile = 1, /**< End of file record. */ ++ HEX_RECORD_TYPE_ExtendedSegmentAddress = 2, /**< Extended segment start record. */ ++ HEX_RECORD_TYPE_StartSegmentAddress = 3, /**< Normal segment start record. */ ++ HEX_RECORD_TYPE_ExtendedLinearAddress = 4, /**< Extended linear address start record. */ ++ HEX_RECORD_TYPE_StartLinearAddress = 5, /**< Linear address start record. */ ++ }; ++ ++ /* Function Prototypes: */ ++ static void SetupHardware(void); ++ ++ void EVENT_USB_Device_Connect(void); ++ void EVENT_USB_Device_Disconnect(void); ++ void EVENT_USB_Device_ConfigurationChanged(void); ++ void EVENT_USB_Device_ControlRequest(void); ++ ++#endif ++ diff --cc lib/lufa/Bootloaders/Printer/BootloaderPrinter.txt index 000000000,000000000..d9aa79686 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/Printer/BootloaderPrinter.txt @@@ -1,0 -1,0 +1,202 @@@ ++/** \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 Printer Class USB AVR Bootloader ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * \li Series 6 USB AVRs (AT90USBxxx6) ++ * \li Series 4 USB AVRs (ATMEGAxxU4) ++ * \li Series 2 USB AVRs (AT90USBxx2, ATMEGAxxU2) ++ * ++ * \section Sec_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>Printer Class</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>Printer Subclass</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF Printer Class Standard</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * This bootloader enumerates to the host as a Generic Text Only Printer device, capable of reading and parsing ++ * "printed" plain-text Intel HEX files to load firmware onto the AVR. ++ * ++ * Out of the box this bootloader builds for the AT90USB1287 with an 8KB bootloader section size, and will fit ++ * into 4KB of bootloader space. If you wish to alter this size and/or change the AVR model, you will need to ++ * edit the MCU, FLASH_SIZE_KB and BOOT_SECTION_SIZE_KB values in the accompanying makefile. ++ * ++ * When the bootloader is running, the board's LED(s) will flash at regular intervals to distinguish the ++ * bootloader from the normal user application. ++ * ++ * \section Sec_Running Running the Bootloader ++ * ++ * On the USB AVR8 devices, setting the \c HWBE device fuse will cause the bootloader to run if the \c HWB pin of ++ * the AVR is grounded when the device is reset. ++ * ++ * The are two behaviours of this bootloader, depending on the device's fuses: ++ * ++ * <b>If the device's BOOTRST fuse is set</b>, the bootloader will run any time the system is reset from ++ * the external reset pin, unless no valid user application has been loaded. To initiate the bootloader, the ++ * device's external reset pin should be grounded momentarily. ++ * ++ * <b>If the device's BOOTRST fuse is not set</b>, the bootloader will run only if initiated via a software ++ * jump, or if the \c HWB pin was low during the last device reset (if the \c HWBE fuse is set). ++ * ++ * For board specific exceptions to the above, see below. ++ * ++ * \subsection SSec_XPLAIN Atmel Xplain Board ++ * Ground the USB AVR JTAG's \c TCK pin to ground when powering on the board to start the bootloader. This assumes the ++ * \c HWBE fuse is cleared and the \c BOOTRST fuse is set as the HWBE pin is not user accessible on this board. ++ * ++ * \subsection SSec_Leonardo Arduino Leonardo Board ++ * Ground \c IO13 when powering the board to start the bootloader. This assumes the \c HWBE fuse is cleared and the ++ * \c BOOTRST fuse is set as the HWBE pin is not user accessible on this board. ++ * ++ * \section Sec_Installation Driver Installation ++ * ++ * This bootloader uses the Generic Text-Only printer drivers inbuilt into all modern operating systems, thus no ++ * additional drivers need to be supplied for correct operation. ++ * ++ * \section Sec_HostApp Host Controller Application ++ * ++ * This bootloader is compatible with Notepad under Windows, and the command line \c lpr utility under Linux. ++ * ++ * \subsection SSec_Notepad Notepad (Windows) ++ * ++ * While most text applications under Windows will be compatible with the bootloader, the inbuilt Notepad utility ++ * is recommended as it will introduce minimal formatting changes to the output stream. To program with Notepad, ++ * open the target HEX file and print it to the Generic Text Only printer device the bootloader creates. ++ * ++ * \subsection SSec_LPR LPR (Linux) ++ * ++ * While the CUPS framework under Linux will enumerate the bootloader as a Generic Text-Only printer, many ++ * applications will refuse to print to the device due to the lack of rich formatting options available. As a result, ++ * under Linux HEX files must be printed via the low level \c lpr utility instead. ++ * ++ * \code ++ * cat Mouse.hex | lpr ++ * \endcode ++ * ++ * \section Sec_API User Application API ++ * ++ * Several user application functions for FLASH and other special memory area manipulations are exposed by the bootloader, ++ * allowing the user application to call into the bootloader at runtime to read and write FLASH data. ++ * ++ * By default, the bootloader API jump table is located 32 bytes from the end of the device's FLASH memory, and follows the ++ * following layout: ++ * ++ * \code ++ * #define BOOTLOADER_API_TABLE_SIZE 32 ++ * #define BOOTLOADER_API_TABLE_START ((FLASHEND + 1UL) - BOOTLOADER_API_TABLE_SIZE) ++ * #define BOOTLOADER_API_CALL(Index) (void*)((BOOTLOADER_API_TABLE_START + (Index * 2)) / 2) ++ * ++ * void (*BootloaderAPI_ErasePage)(uint32_t Address) = BOOTLOADER_API_CALL(0); ++ * void (*BootloaderAPI_WritePage)(uint32_t Address) = BOOTLOADER_API_CALL(1); ++ * void (*BootloaderAPI_FillWord)(uint32_t Address, uint16_t Word) = BOOTLOADER_API_CALL(2); ++ * uint8_t (*BootloaderAPI_ReadSignature)(uint16_t Address) = BOOTLOADER_API_CALL(3); ++ * uint8_t (*BootloaderAPI_ReadFuse)(uint16_t Address) = BOOTLOADER_API_CALL(4); ++ * uint8_t (*BootloaderAPI_ReadLock)(void) = BOOTLOADER_API_CALL(5); ++ * void (*BootloaderAPI_WriteLock)(uint8_t LockBits) = BOOTLOADER_API_CALL(6); ++ * ++ * #define BOOTLOADER_MAGIC_SIGNATURE_START (BOOTLOADER_API_TABLE_START + (BOOTLOADER_API_TABLE_SIZE - 2)) ++ * #define BOOTLOADER_MAGIC_SIGNATURE 0xDCFB ++ * ++ * #define BOOTLOADER_CLASS_SIGNATURE_START (BOOTLOADER_API_TABLE_START + (BOOTLOADER_API_TABLE_SIZE - 4)) ++ * #define BOOTLOADER_PRINTER_SIGNATURE 0xDF20 ++ * ++ * #define BOOTLOADER_ADDRESS_START (BOOTLOADER_API_TABLE_START + (BOOTLOADER_API_TABLE_SIZE - 8)) ++ * #define BOOTLOADER_ADDRESS_LENGTH 4 ++ * \endcode ++ * ++ * From the application the API support of the bootloader can be detected by reading the FLASH memory bytes located at address ++ * \c BOOTLOADER_MAGIC_SIGNATURE_START and comparing them to the value \c BOOTLOADER_MAGIC_SIGNATURE. The class of bootloader ++ * can be determined by reading the FLASH memory bytes located at address \c BOOTLOADER_CLASS_SIGNATURE_START and comparing them ++ * to the value \c BOOTLOADER_PRINTER_SIGNATURE. The start address of the bootloader can be retrieved by reading the bytes of FLASH ++ * memory starting from address \c BOOTLOADER_ADDRESS_START. ++ * ++ * \subsection SSec_API_MemLayout Device Memory Map ++ * The following illustration indicates the final memory map of the device when loaded with the bootloader. ++ * ++ * \verbatim ++ * +----------------------------+ 0x0000 ++ * | | ++ * | | ++ * | | ++ * | | ++ * | | ++ * | | ++ * | | ++ * | | ++ * | User Application | ++ * | | ++ * | | ++ * | | ++ * | | ++ * | | ++ * | | ++ * | | ++ * +----------------------------+ FLASHEND - BOOT_SECTION_SIZE ++ * | | ++ * | Bootloader Application | ++ * | (Not User App. Accessible) | ++ * | | ++ * +----------------------------+ FLASHEND - 96 ++ * | API Table Trampolines | ++ * | (Not User App. Accessible) | ++ * +----------------------------+ FLASHEND - 32 ++ * | Bootloader API Table | ++ * | (User App. Accessible) | ++ * +----------------------------+ FLASHEND - 8 ++ * | Bootloader ID Constants | ++ * | (User App. Accessible) | ++ * +----------------------------+ FLASHEND ++ * \endverbatim ++ * ++ * ++ * \section Sec_KnownIssues Known Issues: ++ * ++ * \par On Linux machines, new firmware fails to be sent to the device via CUPS. ++ * Only a limited subset of normal printer functionality is exposed via the ++ * bootloader, causing CUPS to reject print requests from applications that ++ * are unable to handle true plain-text printing. For best results, the low ++ * level \c lpr command should be used to print new firmware to the bootloader. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Bootloaders/Printer/Config/LUFAConfig.h index 000000000,000000000..5aa0e765b new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/Printer/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++ #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++ #define USB_DEVICE_ONLY ++// #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++ #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++ #define USE_RAM_DESCRIPTORS ++// #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++ #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++ #define DEVICE_STATE_AS_GPIOR 0 ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++ #define NO_DEVICE_REMOTE_WAKEUP ++ #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Bootloaders/Printer/Descriptors.c index 000000000,000000000..99625d605 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/Printer/Descriptors.c @@@ -1,0 -1,0 +1,194 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special ++ * computer-readable structures which the host requests upon device enumeration, to determine ++ * the device's capabilities and functions. ++ */ ++ ++#include "Descriptors.h" ++ ++ ++/** Device descriptor structure. This descriptor, located in SRAM memory, describes the overall ++ * device characteristics, including the supported USB version, control endpoint size and the ++ * number of device configurations. The descriptor is read out by the USB host when the enumeration ++ * process begins. ++ */ ++const USB_Descriptor_Device_t DeviceDescriptor = ++{ ++ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, ++ ++ .USBSpecification = VERSION_BCD(1,1,0), ++ .Class = USB_CSCP_NoDeviceClass, ++ .SubClass = USB_CSCP_NoDeviceSubclass, ++ .Protocol = USB_CSCP_NoDeviceProtocol, ++ ++ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, ++ ++ .VendorID = 0x03EB, ++ .ProductID = 0x206B, ++ .ReleaseNumber = VERSION_BCD(0,0,1), ++ ++ .ManufacturerStrIndex = STRING_ID_Manufacturer, ++ .ProductStrIndex = STRING_ID_Product, ++ .SerialNumStrIndex = NO_DESCRIPTOR, ++ ++ .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS ++}; ++ ++/** Configuration descriptor structure. This descriptor, located in SRAM memory, describes the usage ++ * of the device in one of its supported configurations, including information about any device interfaces ++ * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting ++ * a configuration so that the host may correctly communicate with the USB device. ++ */ ++const USB_Descriptor_Configuration_t ConfigurationDescriptor = ++{ ++ .Config = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration}, ++ ++ .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t), ++ .TotalInterfaces = 1, ++ ++ .ConfigurationNumber = 1, ++ .ConfigurationStrIndex = NO_DESCRIPTOR, ++ ++ .ConfigAttributes = USB_CONFIG_ATTR_RESERVED, ++ ++ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) ++ }, ++ ++ .Printer_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_Printer, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 2, ++ ++ .Class = PRNT_CSCP_PrinterClass, ++ .SubClass = PRNT_CSCP_PrinterSubclass, ++ .Protocol = PRNT_CSCP_BidirectionalProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .Printer_DataInEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = PRINTER_IN_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = PRINTER_IO_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++ ++ .Printer_DataOutEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = PRINTER_OUT_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = PRINTER_IO_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ } ++}; ++ ++/** Language descriptor structure. This descriptor, located in SRAM memory, is returned when the host requests ++ * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate ++ * via the language ID table available at USB.org what languages the device supports for its string descriptors. ++ */ ++const USB_Descriptor_String_t LanguageString = USB_STRING_DESCRIPTOR_ARRAY(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. ++ */ ++const USB_Descriptor_String_t ManufacturerString = USB_STRING_DESCRIPTOR(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. ++ */ ++const USB_Descriptor_String_t ProductString = USB_STRING_DESCRIPTOR(L"LUFA Printer Bootloader"); ++ ++/** 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 uint16_t wIndex, ++ const void** const DescriptorAddress) ++{ ++ const uint8_t DescriptorType = (wValue >> 8); ++ const uint8_t DescriptorNumber = (wValue & 0xFF); ++ ++ const void* Address = NULL; ++ uint16_t Size = NO_DESCRIPTOR; ++ ++ switch (DescriptorType) ++ { ++ case DTYPE_Device: ++ Address = &DeviceDescriptor; ++ Size = sizeof(USB_Descriptor_Device_t); ++ break; ++ case DTYPE_Configuration: ++ Address = &ConfigurationDescriptor; ++ Size = sizeof(USB_Descriptor_Configuration_t); ++ break; ++ case DTYPE_String: ++ switch (DescriptorNumber) ++ { ++ case STRING_ID_Language: ++ Address = &LanguageString; ++ Size = LanguageString.Header.Size; ++ break; ++ case STRING_ID_Manufacturer: ++ Address = &ManufacturerString; ++ Size = ManufacturerString.Header.Size; ++ break; ++ case STRING_ID_Product: ++ Address = &ProductString; ++ Size = ProductString.Header.Size; ++ break; ++ } ++ ++ break; ++ } ++ ++ *DescriptorAddress = Address; ++ return Size; ++} ++ diff --cc lib/lufa/Bootloaders/Printer/Descriptors.h index 000000000,000000000..adb0dddb6 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/Printer/Descriptors.h @@@ -1,0 -1,0 +1,96 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * Header file for Descriptors.c. ++ */ ++ ++#ifndef _DESCRIPTORS_H_ ++#define _DESCRIPTORS_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include <avr/pgmspace.h> ++ ++ /* Macros: */ ++ /** Endpoint address of the Printer device-to-host data IN endpoint. */ ++ #define PRINTER_IN_EPADDR (ENDPOINT_DIR_IN | 3) ++ ++ /** Endpoint address of the Printer host-to-device data OUT endpoint. */ ++ #define PRINTER_OUT_EPADDR (ENDPOINT_DIR_OUT | 4) ++ ++ /** Size in bytes of the Printer data endpoints. */ ++ #define PRINTER_IO_EPSIZE 64 ++ ++ /* 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; ++ ++ // Printer Interface ++ USB_Descriptor_Interface_t Printer_Interface; ++ USB_Descriptor_Endpoint_t Printer_DataInEndpoint; ++ USB_Descriptor_Endpoint_t Printer_DataOutEndpoint; ++ } USB_Descriptor_Configuration_t; ++ ++ /** Enum for the device interface descriptor IDs within the device. Each string descriptor ++ * should have a unique ID index associated with it, which can be used to refer to the ++ * interface from other descriptors. ++ */ ++ enum InterfaceDescriptors_t ++ { ++ INTERFACE_ID_Printer = 0, /**< Printer interface descriptor ID */ ++ }; ++ ++ /** Enum for the device string descriptor IDs within the device. Each string descriptor should ++ * have a unique ID index associated with it, which can be used to refer to the string from ++ * other descriptors. ++ */ ++ enum StringDescriptors_t ++ { ++ STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */ ++ STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */ ++ STRING_ID_Product = 2, /**< Product string ID */ ++ }; ++ ++ /* Function Prototypes: */ ++ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ++ const uint16_t wIndex, ++ const void** const DescriptorAddress) ++ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); ++ ++#endif ++ diff --cc lib/lufa/Bootloaders/Printer/asf.xml index 000000000,000000000..86a56911e new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/Printer/asf.xml @@@ -1,0 -1,0 +1,159 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Printer Bootloader - 128KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.128_4" force-caption="true" workspace-name="lufa_printer_128kb_4kb_"> ++ <require idref="lufa.bootloaders.printer"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <config name="config.compiler.optimization.level" value="size"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ ++ <build type="define" name="BOOT_START_ADDR" value="0x1F000"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.text=0x1F000"/> ++ ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FFA0"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FFE0"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FFF8"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/> ++ </project> ++ ++ <project caption="Printer Bootloader - 64KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.64_4" force-caption="true" workspace-name="lufa_printer_64kb_4kb_"> ++ <require idref="lufa.bootloaders.printer"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb647"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <config name="config.compiler.optimization.level" value="size"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ ++ <build type="define" name="BOOT_START_ADDR" value="0xF000"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.text=0xF000"/> ++ ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0xFFA0"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0xFFE0"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0xFFF8"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/> ++ </project> ++ ++ <project caption="Printer Bootloader - 32KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.32_4" force-caption="true" workspace-name="lufa_printer_32kb_4kb_"> ++ <require idref="lufa.bootloaders.printer"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atmega32u4"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <config name="config.compiler.optimization.level" value="size"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ ++ <build type="define" name="BOOT_START_ADDR" value="0x7000"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/> ++ ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x7FA0"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x7FE0"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x7FF8"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/> ++ </project> ++ ++ <project caption="Printer Bootloader - 16KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.16_4" force-caption="true" workspace-name="lufa_printer_16kb_4kb_"> ++ <require idref="lufa.bootloaders.printer"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atmega16u2"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <config name="config.compiler.optimization.level" value="size"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ ++ <build type="define" name="BOOT_START_ADDR" value="0x3000"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.text=0x3000"/> ++ ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x3FA0"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x3FE0"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x3FF8"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/> ++ </project> ++ ++ <project caption="Printer Bootloader - 8KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.8_4" force-caption="true" workspace-name="lufa_printer_8kb_4kb_"> ++ <require idref="lufa.bootloaders.printer"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atmega8u2"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <config name="config.compiler.optimization.level" value="size"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ ++ <build type="define" name="BOOT_START_ADDR" value="0x1000"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.text=0x1000"/> ++ ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FA0"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FE0"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/> ++ <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FF8"/> ++ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/> ++ </project> ++ ++ <module type="application" id="lufa.bootloaders.printer" caption="Printer Bootloader"> ++ <info type="description" value="summary"> ++ Printer Class Bootloader, capable of reprogramming a device by "printing" new HEX files to the virtual Plain-Text printer it creates when plugged into a host. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Bootloaders"/> ++ <keyword value="USB Device"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="include-path" value="."/> ++ <build type="c-source" value="BootloaderPrinter.c"/> ++ <build type="header-file" value="BootloaderPrinter.h"/> ++ <build type="c-source" value="Descriptors.c"/> ++ <build type="header-file" value="Descriptors.h"/> ++ <build type="c-source" value="BootloaderAPI.c"/> ++ <build type="header-file" value="BootloaderAPI.h"/> ++ <build type="asm-source" value="BootloaderAPITable.S"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="BootloaderPrinter.txt"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ </module> ++</asf> diff --cc lib/lufa/Bootloaders/Printer/doxyfile index 000000000,000000000..0f96bb9b7 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/Printer/doxyfile @@@ -1,0 -1,0 +1,2396 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Printer Class Bootloader" ++ ++# The PROJECT_NUMBER tag can be used to enter a project or revision number. This ++# could be handy for archiving the generated documentation or if some version ++# control system is used. ++ ++PROJECT_NUMBER = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM \ ++ ATTR_NO_INIT ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Bootloaders/Printer/makefile index 000000000,000000000..2c8582ca2 new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/Printer/makefile @@@ -1,0 -1,0 +1,62 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = BootloaderPrinter ++SRC = $(TARGET).c Descriptors.c BootloaderAPI.c BootloaderAPITable.S $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) ++LUFA_PATH = ../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ -DBOOT_START_ADDR=$(BOOT_START_OFFSET) ++LD_FLAGS = -Wl,--section-start=.text=$(BOOT_START_OFFSET) $(BOOT_API_LD_FLAGS) ++ ++# Flash size and bootloader section sizes of the target, in KB. These must ++# match the target's total FLASH size and the bootloader size set in the ++# device's fuses. ++FLASH_SIZE_KB = 128 ++BOOT_SECTION_SIZE_KB = 8 ++ ++# Bootloader address calculation formulas ++# Do not modify these macros, but rather modify the dependent values above. ++CALC_ADDRESS_IN_HEX = $(shell printf "0x%X" $$(( $(1) )) ) ++BOOT_START_OFFSET = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024 ) ++BOOT_SEC_OFFSET = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) * 1024) - ($(strip $(1))) ) ++ ++# Bootloader linker section flags for relocating the API table sections to ++# known FLASH addresses - these should not normally be user-edited. ++BOOT_SECTION_LD_FLAG = -Wl,--section-start=$(strip $(1))=$(call BOOT_SEC_OFFSET, $(3)) -Wl,--undefined=$(strip $(2)) ++BOOT_API_LD_FLAGS = $(call BOOT_SECTION_LD_FLAG, .apitable_trampolines, BootloaderAPI_Trampolines, 96) ++BOOT_API_LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .apitable_jumptable, BootloaderAPI_JumpTable, 32) ++BOOT_API_LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .apitable_signatures, BootloaderAPI_Signatures, 8) ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Bootloaders/makefile index 000000000,000000000..e030ad44a new file mode 100644 --- /dev/null +++ b/lib/lufa/Bootloaders/makefile @@@ -1,0 -1,0 +1,46 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++ ++# Makefile to build all the LUFA USB Bootloaders. Call with "make all" to ++# rebuild all bootloaders. ++ ++# Bootloaders are pre-cleaned before each one is built, to ensure any ++# custom LUFA library build options are reflected in the compiled ++# code. ++ ++PROJECT_DIRECTORIES := $(shell ls -d */) ++ ++# This makefile is potentially infinitely recursive if something really bad ++# happens when determining the set of project directories - hard-abort if ++# more than 10 levels deep to avoid angry emails. ++ifeq ($(MAKELEVEL), 10) ++ $(error EMERGENCY ABORT: INFINITE RECURSION DETECTED) ++endif ++ ++# Need to special-case building without a per-project object directory ++ifeq ($(OBJDIR),) ++ # If no target specified, force "clean all" and disallow parallel build ++ ifeq ($(MAKECMDGOALS),) ++ MAKECMDGOALS := clean all ++ .NOTPARALLEL: ++ endif ++ ++ # If one of the targets is to build, force "clean" beforehand and disallow parallel build ++ ifneq ($(findstring all, $(MAKECMDGOALS)),) ++ MAKECMDGOALS := clean $(MAKECMDGOALS) ++ .NOTPARALLEL: ++ endif ++endif ++ ++%: $(PROJECT_DIRECTORIES) ++ @echo . > /dev/null ++ ++$(PROJECT_DIRECTORIES): ++ @$(MAKE) -C $@ $(MAKECMDGOALS) ++ ++.PHONY: $(PROJECT_DIRECTORIES) diff --cc lib/lufa/BuildTests/BoardDriverTest/Board/Board.h index 000000000,000000000..33b65fe4c new file mode 100644 --- /dev/null +++ b/lib/lufa/BuildTests/BoardDriverTest/Board/Board.h @@@ -1,0 -1,0 +1,82 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Custom Board Hardware Information Driver (Template) ++ * ++ * This is a stub driver header file, for implementing custom board ++ * layout hardware with compatible LUFA board specific drivers. If ++ * the library is configured to use the BOARD_USER board mode, this ++ * driver file should be completed and copied into the "/Board/" folder ++ * inside the application's folder. ++ * ++ * This stub is for the board-specific component of the LUFA Board Hardware ++ * information driver. ++ */ ++ ++#ifndef __BOARD_USER_H__ ++#define __BOARD_USER_H__ ++ ++ /* Includes: */ ++ // TODO: Add any required includes here ++ ++ /* Enable C linkage for C++ Compilers: */ ++ #if defined(__cplusplus) ++ extern "C" { ++ #endif ++ ++ /* Preprocessor Checks: */ ++ #if !defined(__INCLUDE_FROM_BOARD_H) ++ #error Do not include this file directly. Include LUFA/Drivers/Board/Board.h instead. ++ #endif ++ ++ /* Public Interface - May be used in end-application: */ ++ /* Macros: */ ++ /** Indicates the board has a hardware Buttons mounted if defined. */ ++// #define BOARD_HAS_BUTTONS ++ ++ /** Indicates the board has a hardware Dataflash mounted if defined. */ ++// #define BOARD_HAS_DATAFLASH ++ ++ /** Indicates the board has a hardware Joystick mounted if defined. */ ++// #define BOARD_HAS_JOYSTICK ++ ++ /** Indicates the board has a hardware LEDs mounted if defined. */ ++// #define BOARD_HAS_LEDS ++ ++ /* Disable C linkage for C++ Compilers: */ ++ #if defined(__cplusplus) ++ } ++ #endif ++ ++#endif ++ ++/** @} */ ++ diff --cc lib/lufa/BuildTests/BoardDriverTest/Board/Buttons.h index 000000000,000000000..c1a23ef08 new file mode 100644 --- /dev/null +++ b/lib/lufa/BuildTests/BoardDriverTest/Board/Buttons.h @@@ -1,0 -1,0 +1,92 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Custom Board Button Hardware Driver (Template) ++ * ++ * This is a stub driver header file, for implementing custom board ++ * layout hardware with compatible LUFA board specific drivers. If ++ * the library is configured to use the BOARD_USER board mode, this ++ * driver file should be completed and copied into the "/Board/" folder ++ * inside the application's folder. ++ * ++ * This stub is for the board-specific component of the LUFA Buttons driver, ++ * for the control of physical board-mounted GPIO pushbuttons. ++ */ ++ ++#ifndef __BUTTONS_USER_H__ ++#define __BUTTONS_USER_H__ ++ ++ /* Includes: */ ++ // TODO: Add any required includes here ++ ++ /* Enable C linkage for C++ Compilers: */ ++ #if defined(__cplusplus) ++ extern "C" { ++ #endif ++ ++ /* Preprocessor Checks: */ ++ #if !defined(__INCLUDE_FROM_BUTTONS_H) ++ #error Do not include this file directly. Include LUFA/Drivers/Board/Buttons.h instead. ++ #endif ++ ++ #define BOARD_DUMMY_BUTTONS_IMPLEMENTATION ++ ++ /* Public Interface - May be used in end-application: */ ++ /* Macros: */ ++ /** Button mask for the first button on the board. */ ++ #define BUTTONS_BUTTON1 (1 << 0) ++ ++ /* Inline Functions: */ ++ #if !defined(__DOXYGEN__) ++ static inline void Buttons_Init(void) ++ { ++ ++ } ++ ++ static inline void Buttons_Disable(void) ++ { ++ ++ } ++ ++ static inline uint8_t Buttons_GetStatus(void) ATTR_WARN_UNUSED_RESULT; ++ static inline uint8_t Buttons_GetStatus(void) ++ { ++ return 0; ++ } ++ #endif ++ ++ /* Disable C linkage for C++ Compilers: */ ++ #if defined(__cplusplus) ++ } ++ #endif ++ ++#endif ++ diff --cc lib/lufa/BuildTests/BoardDriverTest/Board/Dataflash.h index 000000000,000000000..86726a292 new file mode 100644 --- /dev/null +++ b/lib/lufa/BuildTests/BoardDriverTest/Board/Dataflash.h @@@ -1,0 -1,0 +1,197 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Custom Board Dataflash Hardware Driver (Template) ++ * ++ * This is a stub driver header file, for implementing custom board ++ * layout hardware with compatible LUFA board specific drivers. If ++ * the library is configured to use the BOARD_USER board mode, this ++ * driver file should be completed and copied into the "/Board/" folder ++ * inside the application's folder. ++ * ++ * This stub is for the board-specific component of the LUFA Dataflash ++ * driver. ++*/ ++ ++#ifndef __DATAFLASH_USER_H__ ++#define __DATAFLASH_USER_H__ ++ ++ /* Includes: */ ++ // TODO: Add any required includes here ++ ++ /* Preprocessor Checks: */ ++ #if !defined(__INCLUDE_FROM_DATAFLASH_H) ++ #error Do not include this file directly. Include LUFA/Drivers/Board/Dataflash.h instead. ++ #endif ++ ++ #define BOARD_DUMMY_DATAFLASH_IMPLEMENTATION ++ ++ /* Private Interface - For use in library only: */ ++ #if !defined(__DOXYGEN__) ++ /* Macros: */ ++ #define DATAFLASH_CHIPCS_MASK 0 ++ #define DATAFLASH_CHIPCS_DDR 0 ++ #define DATAFLASH_CHIPCS_PORT 0 ++ #endif ++ ++ /* Public Interface - May be used in end-application: */ ++ /* Macros: */ ++ /** Constant indicating the total number of dataflash ICs mounted on the selected board. */ ++ #define DATAFLASH_TOTALCHIPS 1 ++ ++ /** Mask for no dataflash chip selected. */ ++ #define DATAFLASH_NO_CHIP 0 ++ ++ /** Mask for the first dataflash chip selected. */ ++ #define DATAFLASH_CHIP1 0 ++ ++ /** Mask for the second dataflash chip selected. */ ++ #define DATAFLASH_CHIP2 0 ++ ++ /** Internal main memory page size for the board's dataflash ICs. */ ++ #define DATAFLASH_PAGE_SIZE 0 ++ ++ /** Total number of pages inside each of the board's dataflash ICs. */ ++ #define DATAFLASH_PAGES 0 ++ ++ /* Inline Functions: */ ++ /** Initializes the dataflash driver so that commands and data may be sent to an attached dataflash IC. ++ * The microcontroller's SPI driver MUST be initialized before any of the dataflash commands are used. ++ */ ++ static inline void Dataflash_Init(void) ++ { ++ ++ } ++ ++ /** Sends a byte to the currently selected dataflash IC, and returns a byte from the dataflash. ++ * ++ * \param[in] Byte Byte of data to send to the dataflash ++ * ++ * \return Last response byte from the dataflash ++ */ ++ static inline uint8_t Dataflash_TransferByte(const uint8_t Byte) ATTR_ALWAYS_INLINE; ++ static inline uint8_t Dataflash_TransferByte(const uint8_t Byte) ++ { ++ return 0; ++ } ++ ++ /** Sends a byte to the currently selected dataflash IC, and ignores the next byte from the dataflash. ++ * ++ * \param[in] Byte Byte of data to send to the dataflash ++ */ ++ static inline void Dataflash_SendByte(const uint8_t Byte) ATTR_ALWAYS_INLINE; ++ static inline void Dataflash_SendByte(const uint8_t Byte) ++ { ++ ++ } ++ ++ /** Sends a dummy byte to the currently selected dataflash IC, and returns the next byte from the dataflash. ++ * ++ * \return Last response byte from the dataflash ++ */ ++ static inline uint8_t Dataflash_ReceiveByte(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT; ++ static inline uint8_t Dataflash_ReceiveByte(void) ++ { ++ return 0; ++ } ++ ++ /** Determines the currently selected dataflash chip. ++ * ++ * \return Mask of the currently selected Dataflash chip, either \ref DATAFLASH_NO_CHIP if no chip is selected ++ * or a DATAFLASH_CHIPn mask (where n is the chip number). ++ */ ++ static inline uint8_t Dataflash_GetSelectedChip(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT; ++ static inline uint8_t Dataflash_GetSelectedChip(void) ++ { ++ return 0; ++ } ++ ++ /** Selects the given dataflash chip. ++ * ++ * \param[in] ChipMask Mask of the Dataflash IC to select, in the form of a \c DATAFLASH_CHIPn mask (where n is ++ * the chip number). ++ */ ++ static inline void Dataflash_SelectChip(const uint8_t ChipMask) ATTR_ALWAYS_INLINE; ++ static inline void Dataflash_SelectChip(const uint8_t ChipMask) ++ { ++ ++ } ++ ++ /** Deselects the current dataflash chip, so that no dataflash is selected. */ ++ static inline void Dataflash_DeselectChip(void) ATTR_ALWAYS_INLINE; ++ static inline void Dataflash_DeselectChip(void) ++ { ++ ++ } ++ ++ /** Selects a dataflash IC from the given page number, which should range from 0 to ++ * ((DATAFLASH_PAGES * DATAFLASH_TOTALCHIPS) - 1). For boards containing only one ++ * dataflash IC, this will select DATAFLASH_CHIP1. If the given page number is outside ++ * the total number of pages contained in the boards dataflash ICs, all dataflash ICs ++ * are deselected. ++ * ++ * \param[in] PageAddress Address of the page to manipulate, ranging from ++ * 0 to ((DATAFLASH_PAGES * DATAFLASH_TOTALCHIPS) - 1). ++ */ ++ static inline void Dataflash_SelectChipFromPage(const uint16_t PageAddress) ++ { ++ ++ } ++ ++ /** Toggles the select line of the currently selected dataflash IC, so that it is ready to receive ++ * a new command. ++ */ ++ static inline void Dataflash_ToggleSelectedChipCS(void) ++ { ++ ++ } ++ ++ /** Spin-loops while the currently selected dataflash is busy executing a command, such as a main ++ * memory page program or main memory to buffer transfer. ++ */ ++ static inline void Dataflash_WaitWhileBusy(void) ++ { ++ ++ } ++ ++ /** Sends a set of page and buffer address bytes to the currently selected dataflash IC, for use with ++ * dataflash commands which require a complete 24-bit address. ++ * ++ * \param[in] PageAddress Page address within the selected dataflash IC ++ * \param[in] BufferByte Address within the dataflash's buffer ++ */ ++ static inline void Dataflash_SendAddressBytes(uint16_t PageAddress, const uint16_t BufferByte) ++ { ++ ++ } ++ ++#endif ++ diff --cc lib/lufa/BuildTests/BoardDriverTest/Board/Joystick.h index 000000000,000000000..86a7d7681 new file mode 100644 --- /dev/null +++ b/lib/lufa/BuildTests/BoardDriverTest/Board/Joystick.h @@@ -1,0 -1,0 +1,104 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Custom Board Joystick Hardware Driver (Template) ++ * ++ * This is a stub driver header file, for implementing custom board ++ * layout hardware with compatible LUFA board specific drivers. If ++ * the library is configured to use the BOARD_USER board mode, this ++ * driver file should be completed and copied into the "/Board/" folder ++ * inside the application's folder. ++ * ++ * This stub is for the board-specific component of the LUFA Joystick ++ * driver, for a digital four-way (plus button) joystick. ++*/ ++ ++#ifndef __JOYSTICK_USER_H__ ++#define __JOYSTICK_USER_H__ ++ ++ /* Includes: */ ++ // TODO: Add any required includes here ++ ++ /* Enable C linkage for C++ Compilers: */ ++ #if defined(__cplusplus) ++ extern "C" { ++ #endif ++ ++ /* Preprocessor Checks: */ ++ #if !defined(__INCLUDE_FROM_JOYSTICK_H) ++ #error Do not include this file directly. Include LUFA/Drivers/Board/Joystick.h instead. ++ #endif ++ ++ #define BOARD_DUMMY_JOYSTICK_IMPLEMENTATION ++ ++ /* Public Interface - May be used in end-application: */ ++ /* Macros: */ ++ /** Mask for the joystick being pushed in the left direction. */ ++ #define JOY_LEFT 0 ++ ++ /** Mask for the joystick being pushed in the right direction. */ ++ #define JOY_RIGHT 0 ++ ++ /** Mask for the joystick being pushed in the upward direction. */ ++ #define JOY_UP 0 ++ ++ /** Mask for the joystick being pushed in the downward direction. */ ++ #define JOY_DOWN 0 ++ ++ /** Mask for the joystick being pushed inward. */ ++ #define JOY_PRESS 0 ++ ++ /* Inline Functions: */ ++ #if !defined(__DOXYGEN__) ++ static inline void Joystick_Init(void) ++ { ++ ++ } ++ ++ static inline void Joystick_Disable(void) ++ { ++ ++ } ++ ++ static inline uint8_t Joystick_GetStatus(void) ATTR_WARN_UNUSED_RESULT; ++ static inline uint8_t Joystick_GetStatus(void) ++ { ++ return 0; ++ } ++ #endif ++ ++ /* Disable C linkage for C++ Compilers: */ ++ #if defined(__cplusplus) ++ } ++ #endif ++ ++#endif ++ diff --cc lib/lufa/BuildTests/BoardDriverTest/Board/LEDs.h index 000000000,000000000..548d24232 new file mode 100644 --- /dev/null +++ b/lib/lufa/BuildTests/BoardDriverTest/Board/LEDs.h @@@ -1,0 -1,0 +1,132 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Custom Board LED Hardware Driver (Template) ++ * ++ * This is a stub driver header file, for implementing custom board ++ * layout hardware with compatible LUFA board specific drivers. If ++ * the library is configured to use the BOARD_USER board mode, this ++ * driver file should be completed and copied into the "/Board/" folder ++ * inside the application's folder. ++ * ++ * This stub is for the board-specific component of the LUFA LEDs driver, ++ * for the LEDs (up to four) mounted on most development boards. ++*/ ++ ++#ifndef __LEDS_USER_H__ ++#define __LEDS_USER_H__ ++ ++ /* Includes: */ ++ // TODO: Add any required includes here ++ ++/* Enable C linkage for C++ Compilers: */ ++ #if defined(__cplusplus) ++ extern "C" { ++ #endif ++ ++ /* Preprocessor Checks: */ ++ #if !defined(__INCLUDE_FROM_LEDS_H) ++ #error Do not include this file directly. Include LUFA/Drivers/Board/LEDS.h instead. ++ #endif ++ ++ #define BOARD_DUMMY_LEDS_IMPLEMENTATION ++ ++ /* Public Interface - May be used in end-application: */ ++ /* Macros: */ ++ /** LED mask for the first LED on the board. */ ++ #define LEDS_LED1 (1 << 0) ++ ++ /** LED mask for the second LED on the board. */ ++ #define LEDS_LED2 (1 << 1) ++ ++ /** LED mask for the third LED on the board. */ ++ #define LEDS_LED3 (1 << 2) ++ ++ /** LED mask for the fourth LED on the board. */ ++ #define LEDS_LED4 (1 << 3) ++ ++ /** LED mask for all the LEDs on the board. */ ++ #define LEDS_ALL_LEDS (LEDS_LED1 | LEDS_LED2 | LEDS_LED3 | LEDS_LED4) ++ ++ /** LED mask for none of the board LEDs. */ ++ #define LEDS_NO_LEDS 0 ++ ++ /* Inline Functions: */ ++ #if !defined(__DOXYGEN__) ++ static inline void LEDs_Init(void) ++ { ++ ++ } ++ ++ static inline void LEDs_Disable(void) ++ { ++ ++ } ++ ++ static inline void LEDs_TurnOnLEDs(const uint8_t LEDMask) ++ { ++ ++ } ++ ++ static inline void LEDs_TurnOffLEDs(const uint8_t LEDMask) ++ { ++ ++ } ++ ++ static inline void LEDs_SetAllLEDs(const uint8_t LEDMask) ++ { ++ ++ } ++ ++ static inline void LEDs_ChangeLEDs(const uint8_t LEDMask, const uint8_t ActiveMask) ++ { ++ ++ } ++ ++ static inline void LEDs_ToggleLEDs(const uint8_t LEDMask) ++ { ++ ++ } ++ ++ static inline uint8_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT; ++ static inline uint8_t LEDs_GetLEDs(void) ++ { ++ return 0; ++ } ++ #endif ++ ++ /* Disable C linkage for C++ Compilers: */ ++ #if defined(__cplusplus) ++ } ++ #endif ++ ++#endif ++ diff --cc lib/lufa/BuildTests/BoardDriverTest/BoardDeviceMap.cfg index 000000000,000000000..c12050941 new file mode 100644 --- /dev/null +++ b/lib/lufa/BuildTests/BoardDriverTest/BoardDeviceMap.cfg @@@ -1,0 -1,0 +1,89 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# ++# ============================================================================= ++# Board configuration map script, processed with the "BoardDriverTest" ++# makefile. This script file maps the possible LUFA target BOARD makefile ++# values in user projects to a specific architecture and device. This mapping is ++# then used by the makefile to build all possible drivers for that board, to ++# detect any missing or erroneous functions. To add a new board mapping, use ++# the syntax: ++# ++# BOARD DEFINE = {ARCH} : {MCU} : ++# ++# And re-run the makefile. Note that each board may have only one target. ++# ============================================================================= ++# ++# ++# ----------------- AVR8 Boards ------------------ ++BOARD_ADAFRUITU4 = AVR8 : atmega32u4 : ++BOARD_ATAVRUSBRF01 = AVR8 : at90usb1287 : ++BOARD_BENITO = AVR8 : at90usb162 : ++BOARD_BIGMULTIO = AVR8 : atmega32u4 : ++BOARD_BLACKCAT = AVR8 : at90usb162 : ++BOARD_BUI = AVR8 : at90usb646 : ++BOARD_BUMBLEB = AVR8 : at90usb162 : ++BOARD_CULV3 = AVR8 : atmega32u4 : ++BOARD_DUCE = AVR8 : atmega32u2 : ++BOARD_EVK527 = AVR8 : atmega32u4 : ++BOARD_JMDBU2 = AVR8 : atmega32u2 : ++BOARD_LEONARDO = AVR8 : atmega32u4 : ++BOARD_MAXIMUS = AVR8 : at90usb162 : ++BOARD_MICROPENDOUS_32U2 = AVR8 : atmega32u2 : ++BOARD_MICROPENDOUS_A = AVR8 : at90usb1287 : ++BOARD_MICROPENDOUS_1 = AVR8 : at90usb162 : ++BOARD_MICROPENDOUS_2 = AVR8 : atmega32u4 : ++BOARD_MICROPENDOUS_3 = AVR8 : at90usb1287 : ++BOARD_MICROPENDOUS_4 = AVR8 : at90usb1287 : ++BOARD_MICROPENDOUS_DIP = AVR8 : at90usb1287 : ++BOARD_MICROPENDOUS_REV1 = AVR8 : at90usb1287 : ++BOARD_MICROPENDOUS_REV2 = AVR8 : at90usb1287 : ++BOARD_MICROSIN162 = AVR8 : atmega162 : ++BOARD_MINIMUS = AVR8 : atmega32u2 : ++BOARD_MULTIO = AVR8 : at90usb162 : ++BOARD_NONE = AVR8 : at90usb1287 : ++BOARD_OLIMEX162 = AVR8 : at90usb162 : ++BOARD_OLIMEX32U4 = AVR8 : atmega32u4 : ++BOARD_OLIMEXT32U4 = AVR8 : atmega32u4 : ++BOARD_OLIMEXISPMK2 = AVR8 : at90usb162 : ++BOARD_RZUSBSTICK = AVR8 : at90usb1287 : ++BOARD_SPARKFUN8U2 = AVR8 : atmega8u2 : ++BOARD_STK525 = AVR8 : at90usb647 : ++BOARD_STK526 = AVR8 : at90usb162 : ++BOARD_TEENSY = AVR8 : at90usb162 : ++BOARD_TEENSY2 = AVR8 : at90usb646 : ++BOARD_TUL = AVR8 : atmega32u4 : ++BOARD_UDIP = AVR8 : atmega32u2 : ++BOARD_UNO = AVR8 : atmega8u2 : ++BOARD_USB2AX = AVR8 : atmega32u2 : ++BOARD_USB2AX_V3 = AVR8 : atmega32u2 : ++BOARD_USB2AX_V31 = AVR8 : atmega32u2 : ++BOARD_USBFOO = AVR8 : atmega162 : ++BOARD_USBKEY = AVR8 : at90usb1287 : ++BOARD_USBTINYMKII = AVR8 : at90usb162 : ++BOARD_USER = AVR8 : at90usb1287 : ++BOARD_XPLAIN = AVR8 : at90usb1287 : ++BOARD_XPLAIN_REV1 = AVR8 : at90usb1287 : ++BOARD_STANGE_ISP = AVR8 : at90usb162 : ++BOARD_U2S = AVR8 : atmega32u2 : ++BOARD_YUN = AVR8 : atmega32u4 : ++BOARD_MICRO = AVR8 : atmega32u4 : ++BOARD_POLOLUMICRO = AVR8 : atmega32u4 : ++BOARD_XPLAINED_MINI = AVR8 : atmega32u4 : ++# ++# ----------------- XMEGA Boards ----------------- ++BOARD_A3BU_XPLAINED = XMEGA : atxmega256a3bu : ++BOARD_B1_XPLAINED = XMEGA : atxmega128b1 : ++BOARD_C3_XPLAINED = XMEGA : atxmega384c3 : ++# ++# ------------------ UC3 Boards ------------------ ++BOARD_EVK1100 = UC3 : uc3a0512 : ++BOARD_EVK1101 = UC3 : uc3b0256 : ++BOARD_EVK1104 = UC3 : uc3a3256 : ++BOARD_UC3A3_XPLAINED = UC3 : uc3a3256 : ++# diff --cc lib/lufa/BuildTests/BoardDriverTest/Test.c index 000000000,000000000..8baa4460b new file mode 100644 --- /dev/null +++ b/lib/lufa/BuildTests/BoardDriverTest/Test.c @@@ -1,0 -1,0 +1,115 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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. ++*/ ++ ++#include <LUFA/Common/Common.h> ++#include <LUFA/Drivers/Board/Board.h> ++#include <LUFA/Drivers/Board/Buttons.h> ++#include <LUFA/Drivers/Board/Dataflash.h> ++#include <LUFA/Drivers/Board/LEDs.h> ++#include <LUFA/Drivers/Board/Joystick.h> ++ ++#if defined(BOARD_HAS_BUTTONS) == defined(BOARD_DUMMY_BUTTONS_IMPLEMENTATION) ++ #error Mismatch between BOARD_HAS_BUTTONS and implementation. ++#endif ++ ++#if defined(BOARD_HAS_DATAFLASH) == defined(BOARD_DUMMY_DATAFLASH_IMPLEMENTATION) ++ #error Mismatch between BOARD_HAS_DATAFLASH and implementation. ++#endif ++ ++#if defined(BOARD_HAS_LEDS) == defined(BOARD_DUMMY_LEDS_IMPLEMENTATION) ++ #error Mismatch between BOARD_HAS_LEDS and implementation. ++#endif ++ ++#if defined(BOARD_HAS_JOYSTICK) == defined(BOARD_DUMMY_JOYSTICK_IMPLEMENTATION) ++ #error Mismatch between BOARD_HAS_JOYSTICK and implementation. ++#endif ++ ++int main(void) ++{ ++ uint_reg_t Dummy; ++ ++ /* ============================= ++ * Buttons Compile Check ++ * ============================= */ ++ // cppcheck-suppress redundantAssignment ++ Dummy = BUTTONS_BUTTON1; ++ Buttons_Init(); ++ // cppcheck-suppress redundantAssignment ++ Dummy = Buttons_GetStatus(); ++ Buttons_Disable(); ++ ++ /* ============================= ++ * Dataflash Compile Check ++ * ============================= */ ++ // cppcheck-suppress redundantAssignment ++ Dummy = DATAFLASH_TOTALCHIPS + DATAFLASH_NO_CHIP + DATAFLASH_CHIP1 + DATAFLASH_PAGE_SIZE + DATAFLASH_PAGES; ++ Dataflash_Init(); ++ Dataflash_TransferByte(0); ++ Dataflash_SendByte(0); ++ // cppcheck-suppress redundantAssignment ++ Dummy = Dataflash_ReceiveByte(); ++ // cppcheck-suppress redundantAssignment ++ Dummy = Dataflash_GetSelectedChip(); ++ Dataflash_SelectChip(DATAFLASH_CHIP1); ++ Dataflash_DeselectChip(); ++ Dataflash_SelectChipFromPage(0); ++ Dataflash_ToggleSelectedChipCS(); ++ Dataflash_WaitWhileBusy(); ++ Dataflash_SendAddressBytes(0, 0); ++ ++ /* ============================= ++ * LEDs Compile Check ++ * ============================= */ ++ // cppcheck-suppress redundantAssignment ++ Dummy = LEDS_LED1 + LEDS_LED2 + LEDS_LED3 + LEDS_LED4; ++ LEDs_Init(); ++ LEDs_TurnOnLEDs(LEDS_ALL_LEDS); ++ LEDs_TurnOffLEDs(LEDS_ALL_LEDS); ++ LEDs_SetAllLEDs(LEDS_ALL_LEDS); ++ LEDs_ChangeLEDs(LEDS_ALL_LEDS, LEDS_NO_LEDS); ++ LEDs_ToggleLEDs(LEDS_ALL_LEDS); ++ // cppcheck-suppress redundantAssignment ++ Dummy = LEDs_GetLEDs(); ++ LEDs_Disable(); ++ ++ /* ============================= ++ * Joystick Compile Check ++ * ============================= */ ++ // cppcheck-suppress redundantAssignment ++ Dummy = JOY_LEFT + JOY_RIGHT + JOY_UP + JOY_DOWN + JOY_PRESS; ++ Joystick_Init(); ++ // cppcheck-suppress redundantAssignment ++ Dummy = Joystick_GetStatus(); ++ Joystick_Disable(); ++ ++ (void)Dummy; ++} ++ ++ diff --cc lib/lufa/BuildTests/BoardDriverTest/makefile index 000000000,000000000..8414d9186 new file mode 100644 --- /dev/null +++ b/lib/lufa/BuildTests/BoardDriverTest/makefile @@@ -1,0 -1,0 +1,69 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++ ++# Makefile for the board driver build test. This ++# test attempts to build a dummy project with all ++# possible board targets using their respective ++# compiler. ++ ++# Path to the LUFA library core ++LUFA_PATH := ../../LUFA/ ++ ++# Build test cannot be run with multiple parallel jobs ++.NOTPARALLEL: ++ ++all: begin makeboardlist testboards clean end ++ ++begin: ++ @echo Executing build test "BoardDriverTest". ++ @echo ++ ++end: ++ @echo Build test "BoardDriverTest" complete. ++ @echo ++ ++makeboardlist: ++ @grep "BOARD_" $(patsubst %/,%,$(LUFA_PATH))/Common/BoardTypes.h | cut -d'#' -f2 | cut -d' ' -f2 | grep "BOARD_" > BoardList.txt ++ ++testboards: ++ @echo "buildtest:" > BuildMakefile ++ ++ @while read line; \ ++ do \ ++ build_cfg=`grep "$$line " BoardDeviceMap.cfg | grep -v "#" | cut -d'=' -f2- | sed 's/ //g'`; \ ++ \ ++ build_board=$$line; \ ++ build_arch=`echo $$build_cfg | cut -d':' -f1`; \ ++ build_mcu=`echo $$build_cfg | cut -d':' -f2`; \ ++ \ ++ if ( test -z "$$build_cfg" ); then \ ++ echo "No matching information set for board $$build_board"; \ ++ else \ ++ echo "Found board configuration for $$build_board - $$build_arch, $$build_mcu"; \ ++ \ ++ printf "\t@echo Building dummy project for $$build_board...\n" >> BuildMakefile; \ ++ printf "\t$(MAKE) -f makefile.test clean elf MCU=%s ARCH=%s BOARD=%s\n\n" $$build_mcu $$build_arch $$build_board >> BuildMakefile; \ ++ fi; \ ++ done < BoardList.txt ++ ++ $(MAKE) -f BuildMakefile buildtest ++ ++clean: ++ rm -f BuildMakefile ++ rm -f BoardList.txt ++ $(MAKE) -f makefile.test clean BOARD=NONE ARCH=AVR8 MCU=at90usb1287 ++ $(MAKE) -f makefile.test clean BOARD=NONE ARCH=XMEGA MCU=atxmega128a1u ++ $(MAKE) -f makefile.test clean BOARD=NONE ARCH=UC3 MCU=uc3a0256 ++ ++%: ++ ++.PHONY: all begin end makeboardlist testboards clean ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk diff --cc lib/lufa/BuildTests/BoardDriverTest/makefile.test index 000000000,000000000..373a15e75 new file mode 100644 --- /dev/null +++ b/lib/lufa/BuildTests/BoardDriverTest/makefile.test @@@ -1,0 -1,0 +1,35 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = ++ARCH = ++BOARD = ++F_CPU = $(F_USB) ++F_USB = 8000000 ++OPTIMIZATION = 1 ++TARGET = Test ++SRC = $(TARGET).c ++LUFA_PATH = ../../LUFA ++CC_FLAGS = -Werror ++DEBUG_LEVEL = 0 ++ ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/gcc.mk diff --cc lib/lufa/BuildTests/BootloaderTest/BootloaderDeviceMap.cfg index 000000000,000000000..e02d0a30d new file mode 100644 --- /dev/null +++ b/lib/lufa/BuildTests/BootloaderTest/BootloaderDeviceMap.cfg @@@ -1,0 -1,0 +1,167 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# ++# ============================================================================= ++# Bootloader configuration map script, processed with the "BootloaderTest" ++# makefile. This script file defines the targets for each LUFA bootloader, ++# which are then built as part of the build test to ensure that there are no ++# failures on all standard configurations. To add a new build target for a ++# bootloader to this script, use the format: ++# ++# BOOTLOADER = {ARCH} : {MCU} : {BOARD} : {FLASH SIZE KB} : {BOOT SIZE KB} : {F_USB MHZ} ++# ++# And re-run the makefile. ++# ============================================================================= ++# ++# ++# ------------ CDC Bootloader -------------------- ++CDC = AVR8 : at90usb1287 : XPLAIN : 128 : 8 : 8 : ++CDC = AVR8 : at90usb1287 : NONE : 128 : 8 : 8 : ++CDC = AVR8 : at90usb1287 : NONE : 128 : 4 : 8 : ++CDC = AVR8 : at90usb647 : NONE : 64 : 4 : 8 : ++CDC = AVR8 : at90usb1286 : NONE : 128 : 8 : 8 : ++CDC = AVR8 : at90usb1286 : NONE : 128 : 4 : 8 : ++CDC = AVR8 : at90usb646 : NONE : 64 : 4 : 8 : ++CDC = AVR8 : atmega32u4 : NONE : 32 : 4 : 8 : ++CDC = AVR8 : atmega16u4 : NONE : 16 : 4 : 8 : ++CDC = AVR8 : atmega32u2 : NONE : 32 : 4 : 8 : ++CDC = AVR8 : atmega16u2 : NONE : 16 : 4 : 8 : ++CDC = AVR8 : atmega8u2 : NONE : 8 : 4 : 8 : ++CDC = AVR8 : at90usb162 : NONE : 16 : 4 : 8 : ++CDC = AVR8 : at90usb82 : NONE : 8 : 4 : 8 : ++CDC = AVR8 : at90usb1287 : NONE : 128 : 8 : 16 : ++CDC = AVR8 : at90usb1287 : NONE : 128 : 4 : 16 : ++CDC = AVR8 : at90usb647 : NONE : 64 : 4 : 16 : ++CDC = AVR8 : at90usb1286 : NONE : 128 : 8 : 16 : ++CDC = AVR8 : at90usb1286 : NONE : 128 : 4 : 16 : ++CDC = AVR8 : at90usb646 : NONE : 64 : 4 : 16 : ++CDC = AVR8 : atmega32u4 : NONE : 32 : 4 : 16 : ++CDC = AVR8 : atmega16u4 : NONE : 16 : 4 : 16 : ++CDC = AVR8 : atmega32u2 : NONE : 32 : 4 : 16 : ++CDC = AVR8 : atmega16u2 : NONE : 16 : 4 : 16 : ++CDC = AVR8 : atmega8u2 : NONE : 8 : 4 : 16 : ++CDC = AVR8 : at90usb162 : NONE : 16 : 4 : 16 : ++CDC = AVR8 : at90usb82 : NONE : 8 : 4 : 16 : ++# ++# ------------ DFU Bootloader -------------------- ++DFU = AVR8 : at90usb1287 : XPLAIN : 128 : 8 : 8 : ++DFU = AVR8 : at90usb1287 : NONE : 128 : 8 : 8 : ++DFU = AVR8 : at90usb1287 : NONE : 128 : 4 : 8 : ++DFU = AVR8 : at90usb647 : NONE : 64 : 4 : 8 : ++DFU = AVR8 : at90usb1286 : NONE : 128 : 8 : 8 : ++DFU = AVR8 : at90usb1286 : NONE : 128 : 4 : 8 : ++DFU = AVR8 : at90usb646 : NONE : 64 : 4 : 8 : ++DFU = AVR8 : atmega32u4 : NONE : 32 : 4 : 8 : ++DFU = AVR8 : atmega16u4 : NONE : 16 : 4 : 8 : ++DFU = AVR8 : atmega32u2 : NONE : 32 : 4 : 8 : ++DFU = AVR8 : atmega16u2 : NONE : 16 : 4 : 8 : ++DFU = AVR8 : atmega8u2 : NONE : 8 : 4 : 8 : ++DFU = AVR8 : at90usb162 : NONE : 16 : 4 : 8 : ++DFU = AVR8 : at90usb82 : NONE : 8 : 4 : 8 : ++DFU = AVR8 : at90usb1287 : NONE : 128 : 8 : 16 : ++DFU = AVR8 : at90usb1287 : NONE : 128 : 4 : 16 : ++DFU = AVR8 : at90usb647 : NONE : 64 : 4 : 16 : ++DFU = AVR8 : at90usb1286 : NONE : 128 : 8 : 16 : ++DFU = AVR8 : at90usb1286 : NONE : 128 : 4 : 16 : ++DFU = AVR8 : at90usb646 : NONE : 64 : 4 : 16 : ++DFU = AVR8 : atmega32u4 : NONE : 32 : 4 : 16 : ++DFU = AVR8 : atmega16u4 : NONE : 16 : 4 : 16 : ++DFU = AVR8 : atmega32u2 : NONE : 32 : 4 : 16 : ++DFU = AVR8 : atmega16u2 : NONE : 16 : 4 : 16 : ++DFU = AVR8 : atmega8u2 : NONE : 8 : 4 : 16 : ++DFU = AVR8 : at90usb162 : NONE : 16 : 4 : 16 : ++DFU = AVR8 : at90usb82 : NONE : 8 : 4 : 16 : ++# ++# ------------ HID Bootloader -------------------- ++HID = AVR8 : at90usb1287 : NONE : 128 : 8 : 8 : ++HID = AVR8 : at90usb1287 : NONE : 128 : 4 : 8 : ++HID = AVR8 : at90usb647 : NONE : 64 : 4 : 8 : ++HID = AVR8 : at90usb1286 : NONE : 128 : 8 : 8 : ++HID = AVR8 : at90usb1286 : NONE : 128 : 4 : 8 : ++HID = AVR8 : at90usb646 : NONE : 64 : 4 : 8 : ++HID = AVR8 : atmega32u4 : NONE : 32 : 4 : 8 : ++HID = AVR8 : atmega16u4 : NONE : 16 : 4 : 8 : ++HID = AVR8 : atmega32u2 : NONE : 32 : 2 : 8 : ++HID = AVR8 : atmega32u2 : NONE : 32 : 4 : 8 : ++HID = AVR8 : atmega16u2 : NONE : 16 : 2 : 8 : ++HID = AVR8 : atmega16u2 : NONE : 16 : 4 : 8 : ++HID = AVR8 : atmega8u2 : NONE : 8 : 2 : 8 : ++HID = AVR8 : atmega8u2 : NONE : 8 : 4 : 8 : ++HID = AVR8 : at90usb162 : NONE : 16 : 2 : 8 : ++HID = AVR8 : at90usb162 : NONE : 16 : 4 : 8 : ++HID = AVR8 : at90usb162 : NONE : 16 : 2 : 8 : ++HID = AVR8 : at90usb162 : NONE : 16 : 4 : 8 : ++HID = AVR8 : at90usb1287 : NONE : 128 : 8 : 8 : ++HID = AVR8 : at90usb1287 : NONE : 128 : 4 : 8 : ++HID = AVR8 : at90usb647 : NONE : 64 : 4 : 8 : ++HID = AVR8 : at90usb1286 : NONE : 128 : 8 : 16 : ++HID = AVR8 : at90usb1286 : NONE : 128 : 4 : 16 : ++HID = AVR8 : at90usb646 : NONE : 64 : 4 : 16 : ++HID = AVR8 : atmega32u4 : NONE : 32 : 4 : 16 : ++HID = AVR8 : atmega16u4 : NONE : 16 : 4 : 16 : ++HID = AVR8 : atmega32u2 : NONE : 32 : 2 : 16 : ++HID = AVR8 : atmega32u2 : NONE : 32 : 4 : 16 : ++HID = AVR8 : atmega16u2 : NONE : 16 : 2 : 16 : ++HID = AVR8 : atmega16u2 : NONE : 16 : 4 : 16 : ++HID = AVR8 : atmega8u2 : NONE : 8 : 2 : 16 : ++HID = AVR8 : atmega8u2 : NONE : 8 : 4 : 16 : ++HID = AVR8 : at90usb162 : NONE : 16 : 2 : 16 : ++HID = AVR8 : at90usb162 : NONE : 16 : 4 : 16 : ++HID = AVR8 : at90usb162 : NONE : 16 : 2 : 16 : ++HID = AVR8 : at90usb162 : NONE : 16 : 4 : 16 : ++# ++# ---------- Printer Bootloader ------------------ ++Printer = AVR8 : at90usb1287 : NONE : 128 : 8 : 8 : ++Printer = AVR8 : at90usb1287 : NONE : 128 : 4 : 8 : ++Printer = AVR8 : at90usb647 : NONE : 64 : 4 : 8 : ++Printer = AVR8 : at90usb1286 : NONE : 128 : 8 : 8 : ++Printer = AVR8 : at90usb1286 : NONE : 128 : 4 : 8 : ++Printer = AVR8 : at90usb646 : NONE : 64 : 4 : 8 : ++Printer = AVR8 : atmega32u4 : NONE : 32 : 4 : 8 : ++Printer = AVR8 : atmega16u4 : NONE : 16 : 4 : 8 : ++Printer = AVR8 : atmega32u2 : NONE : 32 : 4 : 8 : ++Printer = AVR8 : atmega16u2 : NONE : 16 : 4 : 8 : ++Printer = AVR8 : atmega8u2 : NONE : 8 : 4 : 8 : ++Printer = AVR8 : at90usb162 : NONE : 16 : 4 : 8 : ++Printer = AVR8 : at90usb82 : NONE : 8 : 4 : 8 : ++Printer = AVR8 : at90usb1287 : NONE : 128 : 8 : 16 : ++Printer = AVR8 : at90usb1287 : NONE : 128 : 4 : 16 : ++Printer = AVR8 : at90usb647 : NONE : 64 : 4 : 16 : ++Printer = AVR8 : at90usb1286 : NONE : 128 : 8 : 16 : ++Printer = AVR8 : at90usb1286 : NONE : 128 : 4 : 16 : ++Printer = AVR8 : at90usb646 : NONE : 64 : 4 : 16 : ++Printer = AVR8 : atmega32u4 : NONE : 32 : 4 : 16 : ++Printer = AVR8 : atmega16u4 : NONE : 16 : 4 : 16 : ++Printer = AVR8 : atmega32u2 : NONE : 32 : 4 : 16 : ++Printer = AVR8 : atmega16u2 : NONE : 16 : 4 : 16 : ++Printer = AVR8 : atmega8u2 : NONE : 8 : 4 : 16 : ++Printer = AVR8 : at90usb162 : NONE : 16 : 4 : 16 : ++Printer = AVR8 : at90usb82 : NONE : 8 : 4 : 16 : ++# ++# ---------- Mass Storage Bootloader ----------------- ++MassStorage = AVR8 : at90usb1287 : XPLAIN : 128 : 8 : 8 : ++MassStorage = AVR8 : at90usb1287 : NONE : 128 : 8 : 8 : ++MassStorage = AVR8 : at90usb1287 : NONE : 128 : 4 : 8 : ++MassStorage = AVR8 : at90usb647 : NONE : 64 : 4 : 8 : ++MassStorage = AVR8 : at90usb1286 : NONE : 128 : 8 : 8 : ++MassStorage = AVR8 : at90usb1286 : NONE : 128 : 4 : 8 : ++MassStorage = AVR8 : at90usb646 : NONE : 64 : 4 : 8 : ++MassStorage = AVR8 : atmega32u4 : LEONARDO : 32 : 4 : 16 : ++MassStorage = AVR8 : atmega32u4 : NONE : 32 : 4 : 8 : ++MassStorage = AVR8 : atmega16u4 : NONE : 16 : 4 : 8 : ++MassStorage = AVR8 : atmega32u2 : NONE : 32 : 4 : 8 : ++MassStorage = AVR8 : at90usb1287 : NONE : 128 : 8 : 16 : ++MassStorage = AVR8 : at90usb1287 : NONE : 128 : 4 : 16 : ++MassStorage = AVR8 : at90usb647 : NONE : 64 : 4 : 16 : ++MassStorage = AVR8 : at90usb1286 : NONE : 128 : 8 : 16 : ++MassStorage = AVR8 : at90usb1286 : NONE : 128 : 4 : 16 : ++MassStorage = AVR8 : at90usb646 : NONE : 64 : 4 : 16 : ++MassStorage = AVR8 : atmega32u4 : NONE : 32 : 4 : 16 : ++MassStorage = AVR8 : atmega16u4 : NONE : 16 : 4 : 16 : ++MassStorage = AVR8 : atmega32u2 : NONE : 32 : 4 : 16 : ++# diff --cc lib/lufa/BuildTests/BootloaderTest/makefile index 000000000,000000000..34bdf1b36 new file mode 100644 --- /dev/null +++ b/lib/lufa/BuildTests/BootloaderTest/makefile @@@ -1,0 -1,0 +1,65 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++ ++# Makefile for the bootloader build test. This ++# test attempts to build all the bootloaders ++# with all supported device configurations. ++ ++# Path to the LUFA library core ++LUFA_PATH := ../../LUFA/ ++ ++# Build test cannot be run with multiple parallel jobs ++.NOTPARALLEL: ++ ++all: begin testbootloaders clean end ++ ++begin: ++ @echo Executing build test "BootloaderTest". ++ @echo ++ ++end: ++ @echo Build test "BootloaderTest" complete. ++ @echo ++ ++testbootloaders: ++ @echo "buildtest:" > BuildMakefile ++ ++ @while read line; \ ++ do \ ++ build_cfg=`echo $$line | grep -v "#" | sed 's/ //g'`; \ ++ \ ++ if ( test -n "$$build_cfg" ); then \ ++ build_bootloader=`echo $$build_cfg | cut -d'=' -f1`; \ ++ build_cfg=`echo $$build_cfg | cut -d'=' -f2-`; \ ++ \ ++ build_arch=`echo $$build_cfg | cut -d':' -f1`; \ ++ build_mcu=`echo $$build_cfg | cut -d':' -f2`; \ ++ build_board=`echo $$build_cfg | cut -d':' -f3`; \ ++ build_flashsize=`echo $$build_cfg | cut -d':' -f4`; \ ++ build_bootsize=`echo $$build_cfg | cut -d':' -f5`; \ ++ build_fusb=`echo $$build_cfg | cut -d':' -f6`; \ ++ \ ++ printf "Found '%s' bootloader configuration (FLASH: %3s KB | BOOT: %3s KB | MCU: %12s / %4s | BOARD: %s | F_USB: %sMHz)\n" $$build_bootloader $$build_flashsize $$build_bootsize $$build_mcu $$build_arch $$build_board $$build_fusb; \ ++ \ ++ printf "\t@echo Building bootloader %s - %s - FLASH: %s KB, BOOT: %s KB, BOARD: %s, F_USB: %sMHz\n" $$build_bootloader $$build_mcu $$build_flashsize $$build_bootsize $$build_board $$build_fusb >> BuildMakefile; \ ++ printf "\t$(MAKE) -C $(patsubst %/,%,$(LUFA_PATH))/../Bootloaders/%s/ clean elf ARCH=%s MCU=%s BOARD=%s FLASH_SIZE_KB=%s BOOT_SECTION_SIZE_KB=%s F_USB=%s000000 DEBUG_LEVEL=0\n\n" $$build_bootloader $$build_arch $$build_mcu $$build_board $$build_flashsize $$build_bootsize $$build_fusb >> BuildMakefile; \ ++ fi; \ ++ done < BootloaderDeviceMap.cfg ++ ++ $(MAKE) -f BuildMakefile buildtest ++ ++clean: ++ rm -f BuildMakefile ++ ++%: ++ ++.PHONY: all begin end testbootloaders clean ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk diff --cc lib/lufa/BuildTests/ModuleTest/Dummy.S index 000000000,000000000..b44cf4c25 new file mode 100644 --- /dev/null +++ b/lib/lufa/BuildTests/ModuleTest/Dummy.S @@@ -1,0 -1,0 +1,41 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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. ++*/ ++ ++.section .text ++ ++ ++# Mandatory entry point for successful compilation and link ++.global main ++main: ++ ++ ++# Mandatory callback needed for base compile of the USB driver ++.global CALLBACK_USB_GetDescriptor ++CALLBACK_USB_GetDescriptor: diff --cc lib/lufa/BuildTests/ModuleTest/Modules.h index 000000000,000000000..686183245 new file mode 100644 --- /dev/null +++ b/lib/lufa/BuildTests/ModuleTest/Modules.h @@@ -1,0 -1,0 +1,56 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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. ++*/ ++ ++#include <LUFA/Common/Common.h> ++ ++#include <LUFA/Platform/Platform.h> ++ ++#include <LUFA/Drivers/USB/USB.h> ++#include <LUFA/Drivers/Misc/RingBuffer.h> ++#include <LUFA/Drivers/Misc/TerminalCodes.h> ++ ++#if (ARCH == ARCH_AVR8) ++ #if defined(ADC) ++ #include <LUFA/Drivers/Peripheral/ADC.h> ++ #endif ++ ++ #include <LUFA/Drivers/Peripheral/Serial.h> ++ #include <LUFA/Drivers/Peripheral/SerialSPI.h> ++ #include <LUFA/Drivers/Peripheral/SPI.h> ++ ++ #if defined(TWCR) ++ #include <LUFA/Drivers/Peripheral/TWI.h> ++ #endif ++#elif (ARCH == ARCH_XMEGA) ++ #include <LUFA/Drivers/Peripheral/Serial.h> ++ #include <LUFA/Drivers/Peripheral/SerialSPI.h> ++ #include <LUFA/Drivers/Peripheral/SPI.h> ++ #include <LUFA/Drivers/Peripheral/TWI.h> ++#endif diff --cc lib/lufa/BuildTests/ModuleTest/Test_C.c index 000000000,000000000..3c3f5a2ab new file mode 100644 --- /dev/null +++ b/lib/lufa/BuildTests/ModuleTest/Test_C.c @@@ -1,0 -1,0 +1,31 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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. ++*/ ++ ++#include "Modules.h" diff --cc lib/lufa/BuildTests/ModuleTest/Test_CPP.cpp index 000000000,000000000..3c3f5a2ab new file mode 100644 --- /dev/null +++ b/lib/lufa/BuildTests/ModuleTest/Test_CPP.cpp @@@ -1,0 -1,0 +1,31 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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. ++*/ ++ ++#include "Modules.h" diff --cc lib/lufa/BuildTests/ModuleTest/makefile index 000000000,000000000..50f1909a3 new file mode 100644 --- /dev/null +++ b/lib/lufa/BuildTests/ModuleTest/makefile @@@ -1,0 -1,0 +1,67 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++ ++# Makefile for the module build test. This test ++# attempts to build as many modules as possible ++# under all supported architectures, and include ++# all module headers in a simple C and C++ ++# application. ++ ++# Path to the LUFA library core ++LUFA_PATH := ../../LUFA/ ++ ++# Build test cannot be run with multiple parallel jobs ++.NOTPARALLEL: ++ ++# List of device families per architecture, one device per architecture sub-family ++AVR8_FAMILIES := at90usb1287 at90usb1286 atmega16u4 atmega16u2 at90usb162 ++XMEGA_FAMILIES := atxmega128a1u atxmega128a3u atxmega256a3bu atxmega128a4u atxmega128b1 atxmega128b3 atxmega128c3 atxmega32c4 ++UC3_FAMILIES := uc3a0256 uc3a1256 uc3a3256 uc3a4256 uc3b0256 uc3b1256 ++ ++# List of all device families, with a family postfix ++DEVICE_FAMILIES := $(AVR8_FAMILIES:%=%.avr8) $(XMEGA_FAMILIES:%=%.xmega) $(UC3_FAMILIES:%=%.uc3) ++ ++ ++all: begin $(DEVICE_FAMILIES) clean end ++ ++arch_avr8: begin $(AVR8_FAMILIES:%=%.avr8) end ++arch_xmega: begin $(XMEGA_FAMILIES:%=%.xmega) end ++arch_uc3: begin $(UC3_FAMILIES:%=%.uc3) end ++ ++begin: ++ @echo Executing build test "ModuleTest". ++ @echo ++ ++end: ++ @echo Build test "ModuleTest" complete. ++ @echo ++ ++%.avr8: ++ @echo Building ModuleTest for ARCH=AVR8 MCU=$(@:%.avr8=%)... ++ $(MAKE) -f makefile.test clean elf ARCH=AVR8 MCU=$(@:%.avr8=%) ++ ++%.xmega: ++ @echo Building ModuleTest for ARCH=XMEGA MCU=$(@:%.xmega=%)... ++ $(MAKE) -f makefile.test clean elf ARCH=XMEGA MCU=$(@:%.xmega=%) ++ ++%.uc3: ++ @echo Building ModuleTest for ARCH=UC3 MCU=$(@:%.uc3=%)... ++ $(MAKE) -f makefile.test clean elf ARCH=UC3 MCU=$(@:%.uc3=%) ++ ++clean: ++ $(MAKE) -f makefile.test clean ARCH=AVR8 MCU=$(firstword $(AVR8_FAMILIES)) ++ $(MAKE) -f makefile.test clean ARCH=XMEGA MCU=$(firstword $(XMEGA_FAMILIES)) ++ $(MAKE) -f makefile.test clean ARCH=UC3 MCU=$(firstword $(UC3_FAMILIES)) ++ ++%: ++ ++.PHONY: all arch_avr8 arch_xmega arch_uc3 begin end ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk diff --cc lib/lufa/BuildTests/ModuleTest/makefile.test index 000000000,000000000..5eeb40398 new file mode 100644 --- /dev/null +++ b/lib/lufa/BuildTests/ModuleTest/makefile.test @@@ -1,0 -1,0 +1,94 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = ++ARCH = ++BOARD = NONE ++F_CPU = $(F_USB) ++OPTIMIZATION = 1 ++TARGET = Test ++SRC = $(TARGET)_C.c $(TARGET)_CPP.cpp Dummy.S $(LUFA_SRC_USB) ++LUFA_PATH = ../../LUFA ++DEBUG_LEVEL = 0 ++ ++ifeq ($(ARCH), AVR8) ++ F_USB = 8000000 ++else ifeq ($(ARCH), XMEGA) ++ F_USB = 48000000 ++else ifeq ($(ARCH), UC3) ++ F_USB = 48000000 ++endif ++ ++# Generic C/C++ compiler flags ++CC_FLAGS = -Wextra ++CC_FLAGS += -Werror ++CC_FLAGS += -Wformat=2 ++CC_FLAGS += -Winit-self ++CC_FLAGS += -Wswitch-enum ++CC_FLAGS += -Wunused ++CC_FLAGS += -Wundef ++CC_FLAGS += -Wpointer-arith ++CC_FLAGS += -Wcast-align ++CC_FLAGS += -Wwrite-strings ++CC_FLAGS += -Wlogical-op ++CC_FLAGS += -Wmissing-declarations ++CC_FLAGS += -Wmissing-field-initializers ++CC_FLAGS += -Wmissing-format-attribute ++CC_FLAGS += -Woverlength-strings ++CC_FLAGS += -Wswitch-default ++CC_FLAGS += -Wfloat-equal ++CC_FLAGS += -Waggregate-return ++CC_FLAGS += -Wmissing-include-dirs ++ ++# Disable warnings not supported by the version of GCC used for UC3 targets (FIXME) ++ifneq ($(ARCH), UC3) ++ CC_FLAGS += -Wdouble-promotion ++endif ++ ++# Only enable redundant declaration warnings for AVR8 target (FIXME) ++ifeq ($(ARCH), AVR8) ++ CC_FLAGS += -Wredundant-decls ++endif ++ ++# C compiler only flags ++C_FLAGS += -Wmissing-parameter-type ++C_FLAGS += -Wmissing-prototypes ++C_FLAGS += -Wnested-externs ++C_FLAGS += -Wbad-function-cast ++C_FLAGS += -Wstrict-prototypes ++C_FLAGS += -Wold-style-definition ++ ++# Disable warnings not supported by the version of GCC used for UC3 targets (FIXME) ++ifneq ($(ARCH), UC3) ++ C_FLAGS += -Wunsuffixed-float-constants ++ C_FLAGS += -Wjump-misses-init ++endif ++ ++# Only check C++ compatibility on the build files, to ensure headers are C++ compatible ++Test_C.c Test_CPP.cpp: CC_FLAGS += -Wc++-compat ++ ++# Potential additional warnings to enable in the future (FIXME) ++#CC_FLAGS += -Wcast-qual ++#CC_FLAGS += -Wconversion ++#CC_FLAGS += -Wsign-conversion ++#CC_FLAGS += -pedantic ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/gcc.mk diff --cc lib/lufa/BuildTests/SingleUSBModeTest/Dummy.S index 000000000,000000000..1be4228d2 new file mode 100644 --- /dev/null +++ b/lib/lufa/BuildTests/SingleUSBModeTest/Dummy.S @@@ -1,0 -1,0 +1,42 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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. ++*/ ++ ++.section .text ++ ++ ++# Mandatory entry point for successful compilation and link ++.global main ++main: ++ # Force code generation of the base USB stack ++ call USB_Init ++ ++# Mandatory callback needed for base compile of the USB driver ++.global CALLBACK_USB_GetDescriptor ++CALLBACK_USB_GetDescriptor: diff --cc lib/lufa/BuildTests/SingleUSBModeTest/Test.c index 000000000,000000000..7ac2e008f new file mode 100644 --- /dev/null +++ b/lib/lufa/BuildTests/SingleUSBModeTest/Test.c @@@ -1,0 -1,0 +1,32 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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. ++*/ ++ ++#include <LUFA/Common/Common.h> ++#include <LUFA/Drivers/USB/USB.h> diff --cc lib/lufa/BuildTests/SingleUSBModeTest/makefile index 000000000,000000000..7921ab6ca new file mode 100644 --- /dev/null +++ b/lib/lufa/BuildTests/SingleUSBModeTest/makefile @@@ -1,0 -1,0 +1,57 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++ ++# Makefile for the single USB mode build test. ++# This test attempts to build the USB module ++# under fixed device and fixed host modes under ++# all supported architectures ++ ++# Path to the LUFA library core ++LUFA_PATH := ../../LUFA/ ++ ++# Build test cannot be run with multiple parallel jobs ++.NOTPARALLEL: ++ ++all: begin compile clean end ++ ++begin: ++ @echo Executing build test "SingleUSBModeTest". ++ @echo ++ ++end: ++ @echo Build test "SingleUSBModeTest" complete. ++ @echo ++ ++compile: ++ @echo Building SingleUSBModeTest for ARCH=AVR8 in device only mode... ++ $(MAKE) -f makefile.test clean elf ARCH=AVR8 MCU=at90usb1287 CC_FLAGS='-D USB_DEVICE_ONLY' ++ ++ @echo Building SingleUSBModeTest for ARCH=AVR8 in host only mode... ++ $(MAKE) -f makefile.test clean elf ARCH=AVR8 MCU=at90usb1287 CC_FLAGS='-D USB_HOST_ONLY' ++ ++ @echo Building SingleUSBModeTest for ARCH=XMEGA in device only mode... ++ $(MAKE) -f makefile.test clean elf ARCH=XMEGA MCU=atxmega128a1u CC_FLAGS='-D USB_DEVICE_ONLY' ++ ++ @echo Building SingleUSBModeTest for ARCH=UC3 in device only mode... ++ $(MAKE) -f makefile.test clean elf ARCH=UC3 MCU=uc3a0256 CC_FLAGS='-D USB_DEVICE_ONLY' ++ ++ @echo Building SingleUSBModeTest for ARCH=UC3 in host only mode... ++ $(MAKE) -f makefile.test clean elf ARCH=UC3 MCU=uc3a0256 CC_FLAGS='-D USB_HOST_ONLY' ++ ++clean: ++ $(MAKE) -f makefile.test clean ARCH=AVR8 MCU=at90usb1287 ++ $(MAKE) -f makefile.test clean ARCH=XMEGA MCU=atxmega128a1u ++ $(MAKE) -f makefile.test clean ARCH=UC3 MCU=uc3a0256 ++ ++%: ++ ++.PHONY: begin end compile clean ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk diff --cc lib/lufa/BuildTests/SingleUSBModeTest/makefile.test index 000000000,000000000..365c7d00b new file mode 100644 --- /dev/null +++ b/lib/lufa/BuildTests/SingleUSBModeTest/makefile.test @@@ -1,0 -1,0 +1,75 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = ++ARCH = ++BOARD = NONE ++F_CPU = $(F_USB) ++DEBUG_LEVEL = 0 ++ ++ifeq ($(ARCH), AVR8) ++ F_USB = 8000000 ++else ifeq ($(ARCH), XMEGA) ++ F_USB = 48000000 ++else ifeq ($(ARCH), UC3) ++ F_USB = 48000000 ++endif ++ ++OPTIMIZATION = 1 ++TARGET = Test ++SRC = Test.c Dummy.S $(LUFA_SRC_USB) ++LUFA_PATH = ../../LUFA ++ ++# Generic C/C++ compiler flags ++CC_FLAGS = -Wextra ++CC_FLAGS += -Werror ++CC_FLAGS += -Wformat=2 ++CC_FLAGS += -Winit-self ++CC_FLAGS += -Wswitch-enum ++CC_FLAGS += -Wunused ++CC_FLAGS += -Wundef ++CC_FLAGS += -Wpointer-arith ++CC_FLAGS += -Wcast-align ++CC_FLAGS += -Wwrite-strings ++CC_FLAGS += -Wlogical-op ++CC_FLAGS += -Wmissing-declarations ++CC_FLAGS += -Wmissing-field-initializers ++CC_FLAGS += -Wmissing-format-attribute ++CC_FLAGS += -Woverlength-strings ++ ++# Only enable rendundant declaration warnings for AVR8 target (FIXME) ++ifeq ($(ARCH), AVR8) ++ CC_FLAGS += -Wredundant-decls ++endif ++ ++# C compiler only flags ++C_FLAGS += -Wmissing-parameter-type ++C_FLAGS += -Wnested-externs ++ ++# Potential additional warnings to enable in the future (FIXME) ++#CC_FLAGS += -Wswitch-default ++#CC_FLAGS += -Wc++-compat ++#CC_FLAGS += -Wcast-qual ++#CC_FLAGS += -Wconversion ++#CC_FLAGS += -Wjump-misses-init ++#CC_FLAGS += -pedantic ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/gcc.mk diff --cc lib/lufa/BuildTests/StaticAnalysisTest/makefile index 000000000,000000000..0041234d1 new file mode 100644 --- /dev/null +++ b/lib/lufa/BuildTests/StaticAnalysisTest/makefile @@@ -1,0 -1,0 +1,47 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++ ++# Static anlysis of the entire LUFA source tree, using the free cross-platform "cppcheck" tool. ++ ++# Path to the LUFA library core ++LUFA_PATH := ../../LUFA/ ++ ++CPPCHECK_EXCLUDES := FATFs/ \ ++ PetiteFATFs/ \ ++ uip/ ++ ++CPPCHECK_INCLUDES := $(patsubst %/,%,$(LUFA_PATH))/CodeTemplates/ \ ++ $(patsubst %/,%,$(LUFA_PATH))/../Projects/AVRISP-MKII/ ++ ++CPPCHECK_FLAGS := -U TEMPLATE_FUNC_NAME -U __GNUC__ -U __DOXYGEN__ ++ ++CPPCHECK_SUPPRESS := variableScope missingInclude unusedFunction ++ ++SRC := $(patsubst %/,%,$(LUFA_PATH))/.. ++ ++# Build test cannot be run with multiple parallel jobs ++.NOTPARALLEL: ++ ++all: begin cppcheck end ++ ++begin: ++ @echo Executing build test "StaticAnalysisTest". ++ @echo ++ ++end: ++ @echo Build test "StaticAnalysisTest" complete. ++ @echo ++ ++%: ++ ++.PHONY: all begin end ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk diff --cc lib/lufa/BuildTests/makefile index 000000000,000000000..369ea9ad2 new file mode 100644 --- /dev/null +++ b/lib/lufa/BuildTests/makefile @@@ -1,0 -1,0 +1,24 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++ ++# Makefile to build all the LUFA Build Tests. Build Tests are ++# used to verify the correctness of the LUFA library, and are ++# not intended to be modified or compiled by non-developers. ++ ++all: ++ ++%: ++ @echo Executing \"make $@\" on all LUFA build tests. ++ @echo ++ $(MAKE) -C BoardDriverTest $@ ++ $(MAKE) -C BootloaderTest $@ ++ $(MAKE) -C ModuleTest $@ ++ $(MAKE) -C SingleUSBModeTest $@ ++ $(MAKE) -C StaticAnalysisTest $@ ++ @echo ++ @echo LUFA build test \"make $@\" operation complete. diff --cc lib/lufa/Demos/Device/ClassDriver/AudioInput/AudioInput.c index 000000000,000000000..2870bcd6f new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/AudioInput/AudioInput.c @@@ -1,0 -1,0 +1,274 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 AudioInput demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "AudioInput.h" ++ ++/** LUFA Audio Class driver interface configuration and state information. This structure is ++ * passed to all Audio Class driver functions, so that multiple instances of the same class ++ * within a device can be differentiated from one another. ++ */ ++USB_ClassInfo_Audio_Device_t Microphone_Audio_Interface = ++ { ++ .Config = ++ { ++ .ControlInterfaceNumber = INTERFACE_ID_AudioControl, ++ .StreamingInterfaceNumber = INTERFACE_ID_AudioStream, ++ .DataINEndpoint = ++ { ++ .Address = AUDIO_STREAM_EPADDR, ++ .Size = AUDIO_STREAM_EPSIZE, ++ .Banks = 2, ++ }, ++ }, ++ }; ++ ++/** Current audio sampling frequency of the streaming audio endpoint. */ ++static uint32_t CurrentAudioSampleFrequency = 48000; ++ ++ ++/** 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); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ Audio_Device_USBTask(&Microphone_Audio_Interface); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#endif ++ ++ /* Hardware Initialization */ ++ LEDs_Init(); ++ Buttons_Init(); ++ ADC_Init(ADC_FREE_RUNNING | ADC_PRESCALE_32); ++ ADC_SetupChannel(MIC_IN_ADC_CHANNEL); ++ USB_Init(); ++ ++ /* Start the ADC conversion in free running mode */ ++ ADC_StartReading(ADC_REFERENCE_AVCC | ADC_RIGHT_ADJUSTED | ADC_GET_CHANNEL_MASK(MIC_IN_ADC_CHANNEL)); ++} ++ ++/** ISR to handle the reloading of the data endpoint with the next sample. */ ++ISR(TIMER0_COMPA_vect, ISR_BLOCK) ++{ ++ uint8_t PrevEndpoint = Endpoint_GetCurrentEndpoint(); ++ ++ /* Check that the USB bus is ready for the next sample to write */ ++ if (Audio_Device_IsReadyForNextSample(&Microphone_Audio_Interface)) ++ { ++ int16_t AudioSample; ++ ++ #if defined(USE_TEST_TONE) ++ static uint8_t SquareWaveSampleCount; ++ static int16_t CurrentWaveValue; ++ ++ /* In test tone mode, generate a square wave at 1/256 of the sample rate */ ++ if (SquareWaveSampleCount++ == 0xFF) ++ CurrentWaveValue ^= 0x8000; ++ ++ /* Only generate audio if the board button is being pressed */ ++ AudioSample = (Buttons_GetStatus() & BUTTONS_BUTTON1) ? CurrentWaveValue : 0; ++ #else ++ /* Audio sample is ADC value scaled to fit the entire range */ ++ AudioSample = ((SAMPLE_MAX_RANGE / ADC_MAX_RANGE) * ADC_GetResult()); ++ ++ #if defined(MICROPHONE_BIASED_TO_HALF_RAIL) ++ /* Microphone is biased to half rail voltage, subtract the bias from the sample value */ ++ AudioSample -= (SAMPLE_MAX_RANGE / 2); ++ #endif ++ #endif ++ ++ Audio_Device_WriteSample16(&Microphone_Audio_Interface, AudioSample); ++ } ++ ++ Endpoint_SelectEndpoint(PrevEndpoint); ++} ++ ++/** Event handler for the library USB Connection event. */ ++void EVENT_USB_Device_Connect(void) ++{ ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++ ++ /* Sample reload timer initialization */ ++ TIMSK0 = (1 << OCIE0A); ++ OCR0A = ((F_CPU / 8 / CurrentAudioSampleFrequency) - 1); ++ TCCR0A = (1 << WGM01); // CTC mode ++ TCCR0B = (1 << CS01); // Fcpu/8 speed ++} ++ ++/** Event handler for the library USB Disconnection event. */ ++void EVENT_USB_Device_Disconnect(void) ++{ ++ /* Stop the sample reload timer */ ++ TCCR0B = 0; ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the library USB Configuration Changed event. */ ++void EVENT_USB_Device_ConfigurationChanged(void) ++{ ++ bool ConfigSuccess = true; ++ ++ ConfigSuccess &= Audio_Device_ConfigureEndpoints(&Microphone_Audio_Interface); ++ ++ LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); ++} ++ ++/** Event handler for the library USB Control Request reception event. */ ++void EVENT_USB_Device_ControlRequest(void) ++{ ++ Audio_Device_ProcessControlRequest(&Microphone_Audio_Interface); ++} ++ ++/** Audio class driver callback for the setting and retrieval of streaming endpoint properties. This callback must be implemented ++ * in the user application to handle property manipulations on streaming audio endpoints. ++ * ++ * When the DataLength parameter is NULL, this callback should only indicate whether the specified operation is valid for ++ * the given endpoint index, and should return as fast as possible. When non-NULL, this value may be altered for GET operations ++ * to indicate the size of the retrieved data. ++ * ++ * \note The length of the retrieved data stored into the Data buffer on GET operations should not exceed the initial value ++ * of the \c DataLength parameter. ++ * ++ * \param[in,out] AudioInterfaceInfo Pointer to a structure containing an Audio Class configuration and state. ++ * \param[in] EndpointProperty Property of the endpoint to get or set, a value from Audio_ClassRequests_t. ++ * \param[in] EndpointAddress Address of the streaming endpoint whose property is being referenced. ++ * \param[in] EndpointControl Parameter of the endpoint to get or set, a value from Audio_EndpointControls_t. ++ * \param[in,out] DataLength For SET operations, the length of the parameter data to set. For GET operations, the maximum ++ * length of the retrieved data. When NULL, the function should return whether the given property ++ * and parameter is valid for the requested endpoint without reading or modifying the Data buffer. ++ * \param[in,out] Data Pointer to a location where the parameter data is stored for SET operations, or where ++ * the retrieved data is to be stored for GET operations. ++ * ++ * \return Boolean \c true if the property get/set was successful, \c false otherwise ++ */ ++bool CALLBACK_Audio_Device_GetSetEndpointProperty(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo, ++ const uint8_t EndpointProperty, ++ const uint8_t EndpointAddress, ++ const uint8_t EndpointControl, ++ uint16_t* const DataLength, ++ uint8_t* Data) ++{ ++ /* Check the requested endpoint to see if a supported endpoint is being manipulated */ ++ if (EndpointAddress == Microphone_Audio_Interface.Config.DataINEndpoint.Address) ++ { ++ /* Check the requested control to see if a supported control is being manipulated */ ++ if (EndpointControl == AUDIO_EPCONTROL_SamplingFreq) ++ { ++ switch (EndpointProperty) ++ { ++ case AUDIO_REQ_SetCurrent: ++ /* Check if we are just testing for a valid property, or actually adjusting it */ ++ if (DataLength != NULL) ++ { ++ /* Set the new sampling frequency to the value given by the host */ ++ CurrentAudioSampleFrequency = (((uint32_t)Data[2] << 16) | ((uint32_t)Data[1] << 8) | (uint32_t)Data[0]); ++ ++ /* Adjust sample reload timer to the new frequency */ ++ OCR0A = ((F_CPU / 8 / CurrentAudioSampleFrequency) - 1); ++ } ++ ++ return true; ++ case AUDIO_REQ_GetCurrent: ++ /* Check if we are just testing for a valid property, or actually reading it */ ++ if (DataLength != NULL) ++ { ++ *DataLength = 3; ++ ++ Data[2] = (CurrentAudioSampleFrequency >> 16); ++ Data[1] = (CurrentAudioSampleFrequency >> 8); ++ Data[0] = (CurrentAudioSampleFrequency & 0xFF); ++ } ++ ++ return true; ++ } ++ } ++ } ++ ++ return false; ++} ++ ++/** Audio class driver callback for the setting and retrieval of streaming interface properties. This callback must be implemented ++ * in the user application to handle property manipulations on streaming audio interfaces. ++ * ++ * When the DataLength parameter is NULL, this callback should only indicate whether the specified operation is valid for ++ * the given entity and should return as fast as possible. When non-NULL, this value may be altered for GET operations ++ * to indicate the size of the retrieved data. ++ * ++ * \note The length of the retrieved data stored into the Data buffer on GET operations should not exceed the initial value ++ * of the \c DataLength parameter. ++ * ++ * \param[in,out] AudioInterfaceInfo Pointer to a structure containing an Audio Class configuration and state. ++ * \param[in] Property Property of the interface to get or set, a value from Audio_ClassRequests_t. ++ * \param[in] EntityAddress Address of the audio entity whose property is being referenced. ++ * \param[in] Parameter Parameter of the entity to get or set, specific to each type of entity (see USB Audio specification). ++ * \param[in,out] DataLength For SET operations, the length of the parameter data to set. For GET operations, the maximum ++ * length of the retrieved data. When NULL, the function should return whether the given property ++ * and parameter is valid for the requested endpoint without reading or modifying the Data buffer. ++ * \param[in,out] Data Pointer to a location where the parameter data is stored for SET operations, or where ++ * the retrieved data is to be stored for GET operations. ++ * ++ * \return Boolean \c true if the property GET/SET was successful, \c false otherwise ++ */ ++bool CALLBACK_Audio_Device_GetSetInterfaceProperty(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo, ++ const uint8_t Property, ++ const uint8_t EntityAddress, ++ const uint16_t Parameter, ++ uint16_t* const DataLength, ++ uint8_t* Data) ++{ ++ /* No audio interface entities in the device descriptor, thus no properties to get or set. */ ++ return false; ++} diff --cc lib/lufa/Demos/Device/ClassDriver/AudioInput/AudioInput.h index 000000000,000000000..1deaa7688 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/AudioInput/AudioInput.h @@@ -1,0 -1,0 +1,94 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 AudioInput.c. ++ */ ++ ++#ifndef _AUDIO_INPUT_H_ ++#define _AUDIO_INPUT_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/Board/Buttons.h> ++ #include <LUFA/Drivers/Peripheral/ADC.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Platform/Platform.h> ++ ++ #include "Descriptors.h" ++ #include "Config/AppConfig.h" ++ ++ /* Macros: */ ++ /** Maximum audio sample value for the microphone input. */ ++ #define SAMPLE_MAX_RANGE 0xFFFF ++ ++ /** Maximum ADC range for the microphone input. */ ++ #define ADC_MAX_RANGE 0x3FF ++ ++ /** 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 EVENT_USB_Device_Connect(void); ++ void EVENT_USB_Device_Disconnect(void); ++ void EVENT_USB_Device_ConfigurationChanged(void); ++ void EVENT_USB_Device_ControlRequest(void); ++ ++ bool CALLBACK_Audio_Device_GetSetEndpointProperty(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo, ++ const uint8_t EndpointProperty, ++ const uint8_t EndpointAddress, ++ const uint8_t EndpointControl, ++ uint16_t* const DataLength, ++ uint8_t* Data) ATTR_NON_NULL_PTR_ARG(1); ++ bool CALLBACK_Audio_Device_GetSetInterfaceProperty(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo, ++ const uint8_t Property, ++ const uint8_t EntityAddress, ++ const uint16_t Parameter, ++ uint16_t* const DataLength, ++ uint8_t* Data); ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/AudioInput/AudioInput.txt index 000000000,000000000..4b0594244 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/AudioInput/AudioInput.txt @@@ -1,0 -1,0 +1,92 @@@ ++/** \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 Audio Input Device Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * \li Series 6 USB AVRs (AT90USBxxx6) ++ * \li Series 4 USB AVRs (ATMEGAxxU4) ++ * ++ * \section Sec_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>Audio Class</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>Standard Audio Device</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF Audio 1.0 Class Specification \n ++ * USBIF Audio 1.0 Class Terminal Types Specification \n ++ * USBIF Audio 1.0 Data Formats Specification</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Audio demonstration application. This gives a simple reference ++ * application for implementing a USB Audio Input device using the ++ * basic USB Audio 1.0 drivers in all modern OSes (i.e. no special drivers ++ * required). ++ * ++ * On start-up the system will automatically enumerate and function as a ++ * USB microphone. By default, the demo will produce a square wave test tone ++ * when the board button is pressed. If USE_TEST_TONE is not defined in the ++ * project makefile, incoming audio from the ADC channel 1 will be sampled ++ * and sent to the host computer instead. ++ * ++ * When in microphone mode, connect a microphone to the ADC channel 2. ++ * ++ * Under Windows, if a driver request dialogue pops up, select the option ++ * to automatically install the appropriate drivers. ++ * ++ * \section Sec_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> ++ * <th><b>Define Name:</b></th> ++ * <th><b>Location:</b></th> ++ * <th><b>Description:</b></th> ++ * </tr> ++ * <tr> ++ * <td>MIC_IN_ADC_CHANNEL</td> ++ * <td>AppConfig.h</td> ++ * <td>Sets the ADC channel used by the demo for the input audio samples from an attached microphone.</td> ++ * </tr> ++ * <tr> ++ * <td>USE_TEST_TONE</td> ++ * <td>AppConfig.h</td> ++ * <td>When defined, this alters the demo to produce a square wave test tone when the first board button is pressed ++ * instead of sampling the board microphone.</td> ++ * </tr> ++ * <tr> ++ * <td>MICROPHONE_BIASED_TO_HALF_RAIL</td> ++ * <td>AppConfig.h</td> ++ * <td>When defined, this alters the demo so that the half VCC bias of the microphone input is subtracted.</td> ++ * </tr> ++ * </table> ++ */ ++ diff --cc lib/lufa/Demos/Device/ClassDriver/AudioInput/Config/AppConfig.h index 000000000,000000000..ff8ed270d new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/AudioInput/Config/AppConfig.h @@@ -1,0 -1,0 +1,51 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief Application Configuration Header File ++ * ++ * This is a header file which is be used to configure some of ++ * the application's compile time options, as an alternative to ++ * specifying the compile time constants supplied through a ++ * makefile or build system. ++ * ++ * For information on what each token does, refer to the ++ * \ref Sec_Options section of the application documentation. ++ */ ++ ++#ifndef _APP_CONFIG_H_ ++#define _APP_CONFIG_H_ ++ ++ #define MIC_IN_ADC_CHANNEL 2 ++ ++ #define MICROPHONE_BIASED_TO_HALF_RAIL ++ #define USE_TEST_TONE ++ ++#endif diff --cc lib/lufa/Demos/Device/ClassDriver/AudioInput/Config/LUFAConfig.h index 000000000,000000000..6048c1d80 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/AudioInput/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++ #define USB_DEVICE_ONLY ++// #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Device/ClassDriver/AudioInput/Descriptors.c index 000000000,000000000..82cb337da new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/AudioInput/Descriptors.c @@@ -1,0 -1,0 +1,312 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special ++ * computer-readable structures which the host requests upon device enumeration, to determine ++ * the device's capabilities and functions. ++ */ ++ ++#include "Descriptors.h" ++ ++/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall ++ * device characteristics, including the supported USB version, control endpoint size and the ++ * number of device configurations. The descriptor is read out by the USB host when the enumeration ++ * process begins. ++ */ ++const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = ++{ ++ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, ++ ++ .USBSpecification = VERSION_BCD(2,0,0), ++ .Class = USB_CSCP_NoDeviceClass, ++ .SubClass = USB_CSCP_NoDeviceSubclass, ++ .Protocol = USB_CSCP_NoDeviceProtocol, ++ ++ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, ++ ++ .VendorID = 0x03EB, ++ .ProductID = 0x2047, ++ .ReleaseNumber = VERSION_BCD(0,0,2), ++ ++ .ManufacturerStrIndex = STRING_ID_Manufacturer, ++ .ProductStrIndex = STRING_ID_Product, ++ .SerialNumStrIndex = NO_DESCRIPTOR, ++ ++ .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. ++ */ ++const 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 = 2, ++ ++ .ConfigurationNumber = 1, ++ .ConfigurationStrIndex = NO_DESCRIPTOR, ++ ++ .ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED), ++ ++ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) ++ }, ++ ++ .Audio_ControlInterface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_AudioControl, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 0, ++ ++ .Class = AUDIO_CSCP_AudioClass, ++ .SubClass = AUDIO_CSCP_ControlSubclass, ++ .Protocol = AUDIO_CSCP_ControlProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .Audio_ControlInterface_SPC = ++ { ++ .Header = {.Size = sizeof(USB_Audio_Descriptor_Interface_AC_t), .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_Header, ++ ++ .ACSpecification = VERSION_BCD(1,0,0), ++ .TotalLength = (sizeof(USB_Audio_Descriptor_Interface_AC_t) + ++ sizeof(USB_Audio_Descriptor_InputTerminal_t) + ++ sizeof(USB_Audio_Descriptor_OutputTerminal_t)), ++ ++ .InCollection = 1, ++ .InterfaceNumber = INTERFACE_ID_AudioStream, ++ }, ++ ++ .Audio_InputTerminal = ++ { ++ .Header = {.Size = sizeof(USB_Audio_Descriptor_InputTerminal_t), .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_InputTerminal, ++ ++ .TerminalID = 0x01, ++ .TerminalType = AUDIO_TERMINAL_IN_MIC, ++ .AssociatedOutputTerminal = 0x00, ++ ++ .TotalChannels = 1, ++ .ChannelConfig = 0, ++ ++ .ChannelStrIndex = NO_DESCRIPTOR, ++ .TerminalStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .Audio_OutputTerminal = ++ { ++ .Header = {.Size = sizeof(USB_Audio_Descriptor_OutputTerminal_t), .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_OutputTerminal, ++ ++ .TerminalID = 0x02, ++ .TerminalType = AUDIO_TERMINAL_STREAMING, ++ .AssociatedInputTerminal = 0x00, ++ ++ .SourceID = 0x01, ++ ++ .TerminalStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .Audio_StreamInterface_Alt0 = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_AudioStream, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 0, ++ ++ .Class = AUDIO_CSCP_AudioClass, ++ .SubClass = AUDIO_CSCP_AudioStreamingSubclass, ++ .Protocol = AUDIO_CSCP_StreamingProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .Audio_StreamInterface_Alt1 = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_AudioStream, ++ .AlternateSetting = 1, ++ ++ .TotalEndpoints = 1, ++ ++ .Class = AUDIO_CSCP_AudioClass, ++ .SubClass = AUDIO_CSCP_AudioStreamingSubclass, ++ .Protocol = AUDIO_CSCP_StreamingProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .Audio_StreamInterface_SPC = ++ { ++ .Header = {.Size = sizeof(USB_Audio_Descriptor_Interface_AS_t), .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_General, ++ ++ .TerminalLink = 0x02, ++ ++ .FrameDelay = 1, ++ .AudioFormat = 0x0001 ++ }, ++ ++ .Audio_AudioFormat = ++ { ++ .Header = {.Size = sizeof(USB_Audio_Descriptor_Format_t) + ++ sizeof(ConfigurationDescriptor.Audio_AudioFormatSampleRates), ++ .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_FormatType, ++ ++ .FormatType = 0x01, ++ .Channels = 0x01, ++ ++ .SubFrameSize = 0x02, ++ .BitResolution = 16, ++ ++ .TotalDiscreteSampleRates = (sizeof(ConfigurationDescriptor.Audio_AudioFormatSampleRates) / sizeof(USB_Audio_SampleFreq_t)) ++ }, ++ ++ .Audio_AudioFormatSampleRates = ++ { ++ AUDIO_SAMPLE_FREQ(8000), ++ AUDIO_SAMPLE_FREQ(11025), ++ AUDIO_SAMPLE_FREQ(22050), ++ AUDIO_SAMPLE_FREQ(44100), ++ AUDIO_SAMPLE_FREQ(48000), ++ }, ++ ++ .Audio_StreamEndpoint = ++ { ++ .Endpoint = ++ { ++ .Header = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Std_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = AUDIO_STREAM_EPADDR, ++ .Attributes = (EP_TYPE_ISOCHRONOUS | ENDPOINT_ATTR_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = AUDIO_STREAM_EPSIZE, ++ .PollingIntervalMS = 0x01 ++ }, ++ ++ .Refresh = 0, ++ .SyncEndpointNumber = 0 ++ }, ++ ++ .Audio_StreamEndpoint_SPC = ++ { ++ .Header = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Spc_t), .Type = DTYPE_CSEndpoint}, ++ .Subtype = AUDIO_DSUBTYPE_CSEndpoint_General, ++ ++ .Attributes = (AUDIO_EP_ACCEPTS_SMALL_PACKETS | AUDIO_EP_SAMPLE_FREQ_CONTROL), ++ ++ .LockDelayUnits = 0x00, ++ .LockDelay = 0x0000 ++ } ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_String_t PROGMEM LanguageString = USB_STRING_DESCRIPTOR_ARRAY(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"LUFA Audio In 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 uint16_t wIndex, ++ const void** const DescriptorAddress) ++{ ++ const uint8_t DescriptorType = (wValue >> 8); ++ const uint8_t DescriptorNumber = (wValue & 0xFF); ++ ++ const void* Address = NULL; ++ uint16_t Size = NO_DESCRIPTOR; ++ ++ switch (DescriptorType) ++ { ++ case DTYPE_Device: ++ Address = &DeviceDescriptor; ++ Size = sizeof(USB_Descriptor_Device_t); ++ break; ++ case DTYPE_Configuration: ++ Address = &ConfigurationDescriptor; ++ Size = sizeof(USB_Descriptor_Configuration_t); ++ break; ++ case DTYPE_String: ++ switch (DescriptorNumber) ++ { ++ case STRING_ID_Language: ++ Address = &LanguageString; ++ Size = pgm_read_byte(&LanguageString.Header.Size); ++ break; ++ case STRING_ID_Manufacturer: ++ Address = &ManufacturerString; ++ Size = pgm_read_byte(&ManufacturerString.Header.Size); ++ break; ++ case STRING_ID_Product: ++ Address = &ProductString; ++ Size = pgm_read_byte(&ProductString.Header.Size); ++ break; ++ } ++ ++ break; ++ } ++ ++ *DescriptorAddress = Address; ++ return Size; ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/AudioInput/Descriptors.h index 000000000,000000000..bb73220a2 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/AudioInput/Descriptors.h @@@ -1,0 -1,0 +1,106 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * Header file for Descriptors.c. ++ */ ++ ++#ifndef _DESCRIPTORS_H_ ++#define _DESCRIPTORS_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include <avr/pgmspace.h> ++ ++ #include "Config/AppConfig.h" ++ ++ /* Macros: */ ++ /** Endpoint address of the Audio isochronous streaming data IN endpoint. */ ++ #define AUDIO_STREAM_EPADDR (ENDPOINT_DIR_IN | 1) ++ ++ /** Endpoint size in bytes of the Audio isochronous streaming data endpoint. */ ++ #define AUDIO_STREAM_EPSIZE 256 ++ ++ /* 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; ++ ++ // Audio Control Interface ++ USB_Descriptor_Interface_t Audio_ControlInterface; ++ USB_Audio_Descriptor_Interface_AC_t Audio_ControlInterface_SPC; ++ USB_Audio_Descriptor_InputTerminal_t Audio_InputTerminal; ++ USB_Audio_Descriptor_OutputTerminal_t Audio_OutputTerminal; ++ ++ // Audio Streaming Interface ++ USB_Descriptor_Interface_t Audio_StreamInterface_Alt0; ++ USB_Descriptor_Interface_t Audio_StreamInterface_Alt1; ++ USB_Audio_Descriptor_Interface_AS_t Audio_StreamInterface_SPC; ++ USB_Audio_Descriptor_Format_t Audio_AudioFormat; ++ USB_Audio_SampleFreq_t Audio_AudioFormatSampleRates[5]; ++ USB_Audio_Descriptor_StreamEndpoint_Std_t Audio_StreamEndpoint; ++ USB_Audio_Descriptor_StreamEndpoint_Spc_t Audio_StreamEndpoint_SPC; ++ } USB_Descriptor_Configuration_t; ++ ++ /** Enum for the device interface descriptor IDs within the device. Each interface descriptor ++ * should have a unique ID index associated with it, which can be used to refer to the ++ * interface from other descriptors. ++ */ ++ enum InterfaceDescriptors_t ++ { ++ INTERFACE_ID_AudioControl = 0, /**< Audio control interface descriptor ID */ ++ INTERFACE_ID_AudioStream = 1, /**< Audio stream interface descriptor ID */ ++ }; ++ ++ /** Enum for the device string descriptor IDs within the device. Each string descriptor should ++ * have a unique ID index associated with it, which can be used to refer to the string from ++ * other descriptors. ++ */ ++ enum StringDescriptors_t ++ { ++ STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */ ++ STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */ ++ STRING_ID_Product = 2, /**< Product string ID */ ++ }; ++ ++ /* Function Prototypes: */ ++ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ++ const uint16_t wIndex, ++ const void** const DescriptorAddress) ++ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/AudioInput/asf.xml index 000000000,000000000..466de7303 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/AudioInput/asf.xml @@@ -1,0 -1,0 +1,52 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Audio Input Device Demo (Class Driver APIs)" id="lufa.demos.device.class.audio_input.example.avr8"> ++ <require idref="lufa.demos.device.class.audio_input"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.device.class.audio_input" caption="Audio Input Device Demo (Class Driver APIs)"> ++ <info type="description" value="summary"> ++ Audio 1.0 Input device demo, implementing a basic USB microphone. This demo uses the user-friendly USB Class Driver APIs to provide a simple, abstracted interface into the USB stack. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Class Driver APIs"/> ++ <keyword value="USB Device"/> ++ <keyword value="Audio Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="AudioInput.txt"/> ++ ++ <build type="c-source" value="AudioInput.c"/> ++ <build type="c-source" value="Descriptors.c"/> ++ <build type="header-file" value="AudioInput.h"/> ++ <build type="header-file" value="Descriptors.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="module-config" subtype="required-header-file" value="AppConfig.h"/> ++ <build type="header-file" value="Config/AppConfig.h"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.peripheral.adc"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ <require idref="lufa.drivers.board.buttons"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Device/ClassDriver/AudioInput/doxyfile index 000000000,000000000..d52d22cdc new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/AudioInput/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Audio Input 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Device/ClassDriver/AudioInput/makefile index 000000000,000000000..db4048243 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/AudioInput/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = AudioInput ++SRC = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Device/ClassDriver/AudioOutput/AudioOutput.c index 000000000,000000000..4c78deb9f new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/AudioOutput/AudioOutput.c @@@ -1,0 -1,0 +1,311 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 AudioOutput demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "AudioOutput.h" ++ ++/** LUFA Audio Class driver interface configuration and state information. This structure is ++ * passed to all Audio Class driver functions, so that multiple instances of the same class ++ * within a device can be differentiated from one another. ++ */ ++USB_ClassInfo_Audio_Device_t Speaker_Audio_Interface = ++ { ++ .Config = ++ { ++ .ControlInterfaceNumber = INTERFACE_ID_AudioControl, ++ .StreamingInterfaceNumber = INTERFACE_ID_AudioStream, ++ .DataOUTEndpoint = ++ { ++ .Address = AUDIO_STREAM_EPADDR, ++ .Size = AUDIO_STREAM_EPSIZE, ++ .Banks = 2, ++ }, ++ }, ++ }; ++ ++/** Current audio sampling frequency of the streaming audio endpoint. */ ++static uint32_t CurrentAudioSampleFrequency = 48000; ++ ++ ++/** 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); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ Audio_Device_USBTask(&Speaker_Audio_Interface); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#endif ++ ++ /* Hardware Initialization */ ++ LEDs_Init(); ++ USB_Init(); ++} ++ ++/** ISR to handle the reloading of the PWM timer with the next sample. */ ++ISR(TIMER0_COMPA_vect, ISR_BLOCK) ++{ ++ uint8_t PrevEndpoint = Endpoint_GetCurrentEndpoint(); ++ ++ /* Check that the USB bus is ready for the next sample to read */ ++ if (Audio_Device_IsSampleReceived(&Speaker_Audio_Interface)) ++ { ++ /* Retrieve the signed 16-bit left and right audio samples, convert to 8-bit */ ++ int8_t LeftSample_8Bit = (Audio_Device_ReadSample16(&Speaker_Audio_Interface) >> 8); ++ int8_t RightSample_8Bit = (Audio_Device_ReadSample16(&Speaker_Audio_Interface) >> 8); ++ ++ /* Mix the two channels together to produce a mono, 8-bit sample */ ++ int8_t MixedSample_8Bit = (((int16_t)LeftSample_8Bit + (int16_t)RightSample_8Bit) >> 1); ++ ++ #if defined(AUDIO_OUT_MONO) ++ /* Load the sample into the PWM timer channel */ ++ OCR3A = (MixedSample_8Bit ^ (1 << 7)); ++ #elif defined(AUDIO_OUT_STEREO) ++ /* Load the dual 8-bit samples into the PWM timer channels */ ++ OCR3A = (LeftSample_8Bit ^ (1 << 7)); ++ OCR3B = (RightSample_8Bit ^ (1 << 7)); ++ #elif defined(AUDIO_OUT_PORTC) ++ /* Load the 8-bit mixed sample into PORTC */ ++ PORTC = MixedSample_8Bit; ++ #endif ++ ++ uint8_t LEDMask = LEDS_NO_LEDS; ++ ++ /* Turn on LEDs as the sample amplitude increases */ ++ if (MixedSample_8Bit > 16) ++ LEDMask = (LEDS_LED1 | LEDS_LED2 | LEDS_LED3 | LEDS_LED4); ++ else if (MixedSample_8Bit > 8) ++ LEDMask = (LEDS_LED1 | LEDS_LED2 | LEDS_LED3); ++ else if (MixedSample_8Bit > 4) ++ LEDMask = (LEDS_LED1 | LEDS_LED2); ++ else if (MixedSample_8Bit > 2) ++ LEDMask = (LEDS_LED1); ++ ++ LEDs_SetAllLEDs(LEDMask); ++ } ++ ++ Endpoint_SelectEndpoint(PrevEndpoint); ++} ++ ++/** Event handler for the library USB Connection event. */ ++void EVENT_USB_Device_Connect(void) ++{ ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++ ++ /* Sample reload timer initialization */ ++ TIMSK0 = (1 << OCIE0A); ++ OCR0A = ((F_CPU / 8 / CurrentAudioSampleFrequency) - 1); ++ TCCR0A = (1 << WGM01); // CTC mode ++ TCCR0B = (1 << CS01); // Fcpu/8 speed ++ ++ #if defined(AUDIO_OUT_MONO) ++ /* Set speaker as output */ ++ DDRC |= (1 << 6); ++ #elif defined(AUDIO_OUT_STEREO) ++ /* Set speakers as outputs */ ++ DDRC |= ((1 << 6) | (1 << 5)); ++ #elif defined(AUDIO_OUT_PORTC) ++ /* Set PORTC as outputs */ ++ DDRC |= 0xFF; ++ #endif ++ ++ #if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO)) ++ /* PWM speaker timer initialization */ ++ TCCR3A = ((1 << WGM30) | (1 << COM3A1) | (1 << COM3A0) ++ | (1 << COM3B1) | (1 << COM3B0)); // Set on match, clear on TOP ++ TCCR3B = ((1 << WGM32) | (1 << CS30)); // Fast 8-Bit PWM, F_CPU speed ++ #endif ++} ++ ++/** Event handler for the library USB Disconnection event. */ ++void EVENT_USB_Device_Disconnect(void) ++{ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ ++ /* Stop the sample reload timer */ ++ TCCR0B = 0; ++ ++ #if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO)) ++ /* Stop the PWM generation timer */ ++ TCCR3B = 0; ++ #endif ++ ++ #if defined(AUDIO_OUT_MONO) ++ /* Set speaker as input to reduce current draw */ ++ DDRC &= ~(1 << 6); ++ #elif defined(AUDIO_OUT_STEREO) ++ /* Set speakers as inputs to reduce current draw */ ++ DDRC &= ~((1 << 6) | (1 << 5)); ++ #elif defined(AUDIO_OUT_PORTC) ++ /* Set PORTC low */ ++ PORTC = 0x00; ++ #endif ++} ++ ++/** Event handler for the library USB Configuration Changed event. */ ++void EVENT_USB_Device_ConfigurationChanged(void) ++{ ++ bool ConfigSuccess = true; ++ ++ ConfigSuccess &= Audio_Device_ConfigureEndpoints(&Speaker_Audio_Interface); ++ ++ LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); ++} ++ ++/** Event handler for the library USB Control Request reception event. */ ++void EVENT_USB_Device_ControlRequest(void) ++{ ++ Audio_Device_ProcessControlRequest(&Speaker_Audio_Interface); ++} ++ ++/** Audio class driver callback for the setting and retrieval of streaming endpoint properties. This callback must be implemented ++ * in the user application to handle property manipulations on streaming audio endpoints. ++ * ++ * When the DataLength parameter is NULL, this callback should only indicate whether the specified operation is valid for ++ * the given endpoint index, and should return as fast as possible. When non-NULL, this value may be altered for GET operations ++ * to indicate the size of the retrieved data. ++ * ++ * \note The length of the retrieved data stored into the Data buffer on GET operations should not exceed the initial value ++ * of the \c DataLength parameter. ++ * ++ * \param[in,out] AudioInterfaceInfo Pointer to a structure containing an Audio Class configuration and state. ++ * \param[in] EndpointProperty Property of the endpoint to get or set, a value from Audio_ClassRequests_t. ++ * \param[in] EndpointAddress Address of the streaming endpoint whose property is being referenced. ++ * \param[in] EndpointControl Parameter of the endpoint to get or set, a value from Audio_EndpointControls_t. ++ * \param[in,out] DataLength For SET operations, the length of the parameter data to set. For GET operations, the maximum ++ * length of the retrieved data. When NULL, the function should return whether the given property ++ * and parameter is valid for the requested endpoint without reading or modifying the Data buffer. ++ * \param[in,out] Data Pointer to a location where the parameter data is stored for SET operations, or where ++ * the retrieved data is to be stored for GET operations. ++ * ++ * \return Boolean \c true if the property get/set was successful, \c false otherwise ++ */ ++bool CALLBACK_Audio_Device_GetSetEndpointProperty(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo, ++ const uint8_t EndpointProperty, ++ const uint8_t EndpointAddress, ++ const uint8_t EndpointControl, ++ uint16_t* const DataLength, ++ uint8_t* Data) ++{ ++ /* Check the requested endpoint to see if a supported endpoint is being manipulated */ ++ if (EndpointAddress == Speaker_Audio_Interface.Config.DataOUTEndpoint.Address) ++ { ++ /* Check the requested control to see if a supported control is being manipulated */ ++ if (EndpointControl == AUDIO_EPCONTROL_SamplingFreq) ++ { ++ switch (EndpointProperty) ++ { ++ case AUDIO_REQ_SetCurrent: ++ /* Check if we are just testing for a valid property, or actually adjusting it */ ++ if (DataLength != NULL) ++ { ++ /* Set the new sampling frequency to the value given by the host */ ++ CurrentAudioSampleFrequency = (((uint32_t)Data[2] << 16) | ((uint32_t)Data[1] << 8) | (uint32_t)Data[0]); ++ ++ /* Adjust sample reload timer to the new frequency */ ++ OCR0A = ((F_CPU / 8 / CurrentAudioSampleFrequency) - 1); ++ } ++ ++ return true; ++ case AUDIO_REQ_GetCurrent: ++ /* Check if we are just testing for a valid property, or actually reading it */ ++ if (DataLength != NULL) ++ { ++ *DataLength = 3; ++ ++ Data[2] = (CurrentAudioSampleFrequency >> 16); ++ Data[1] = (CurrentAudioSampleFrequency >> 8); ++ Data[0] = (CurrentAudioSampleFrequency & 0xFF); ++ } ++ ++ return true; ++ } ++ } ++ } ++ ++ return false; ++} ++ ++/** Audio class driver callback for the setting and retrieval of streaming interface properties. This callback must be implemented ++ * in the user application to handle property manipulations on streaming audio interfaces. ++ * ++ * When the DataLength parameter is NULL, this callback should only indicate whether the specified operation is valid for ++ * the given entity and should return as fast as possible. When non-NULL, this value may be altered for GET operations ++ * to indicate the size of the retrieved data. ++ * ++ * \note The length of the retrieved data stored into the Data buffer on GET operations should not exceed the initial value ++ * of the \c DataLength parameter. ++ * ++ * \param[in,out] AudioInterfaceInfo Pointer to a structure containing an Audio Class configuration and state. ++ * \param[in] Property Property of the interface to get or set, a value from Audio_ClassRequests_t. ++ * \param[in] EntityAddress Address of the audio entity whose property is being referenced. ++ * \param[in] Parameter Parameter of the entity to get or set, specific to each type of entity (see USB Audio specification). ++ * \param[in,out] DataLength For SET operations, the length of the parameter data to set. For GET operations, the maximum ++ * length of the retrieved data. When NULL, the function should return whether the given property ++ * and parameter is valid for the requested endpoint without reading or modifying the Data buffer. ++ * \param[in,out] Data Pointer to a location where the parameter data is stored for SET operations, or where ++ * the retrieved data is to be stored for GET operations. ++ * ++ * \return Boolean \c true if the property GET/SET was successful, \c false otherwise ++ */ ++bool CALLBACK_Audio_Device_GetSetInterfaceProperty(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo, ++ const uint8_t Property, ++ const uint8_t EntityAddress, ++ const uint16_t Parameter, ++ uint16_t* const DataLength, ++ uint8_t* Data) ++{ ++ /* No audio interface entities in the device descriptor, thus no properties to get or set. */ ++ return false; ++} diff --cc lib/lufa/Demos/Device/ClassDriver/AudioOutput/AudioOutput.h index 000000000,000000000..4dbec315e new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/AudioOutput/AudioOutput.h @@@ -1,0 -1,0 +1,87 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 AudioOutput.c. ++ */ ++ ++#ifndef _AUDIO_OUTPUT_H_ ++#define _AUDIO_OUTPUT_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <stdlib.h> ++ ++ #include "Descriptors.h" ++ #include "Config/AppConfig.h" ++ ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Platform/Platform.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 EVENT_USB_Device_Connect(void); ++ void EVENT_USB_Device_Disconnect(void); ++ void EVENT_USB_Device_ConfigurationChanged(void); ++ void EVENT_USB_Device_ControlRequest(void); ++ ++ bool CALLBACK_Audio_Device_GetSetEndpointProperty(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo, ++ const uint8_t EndpointProperty, ++ const uint8_t EndpointAddress, ++ const uint8_t EndpointControl, ++ uint16_t* const DataLength, ++ uint8_t* Data) ATTR_NON_NULL_PTR_ARG(1); ++ bool CALLBACK_Audio_Device_GetSetInterfaceProperty(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo, ++ const uint8_t Property, ++ const uint8_t EntityAddress, ++ const uint16_t Parameter, ++ uint16_t* const DataLength, ++ uint8_t* Data); ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/AudioOutput/AudioOutput.txt index 000000000,000000000..8f0c7d656 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/AudioOutput/AudioOutput.txt @@@ -1,0 -1,0 +1,92 @@@ ++/** \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 Audio Output Device Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * \li Series 6 USB AVRs (AT90USBxxx6) ++ * \li Series 4 USB AVRs (ATMEGAxxU4) ++ * ++ * \section Sec_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>Audio Class</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>Standard Audio Device</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF Audio 1.0 Class Specification \n ++ * USBIF Audio 1.0 Class Terminal Types Specification \n ++ * USBIF Audio 1.0 Data Formats Specification</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Audio demonstration application. This gives a simple reference ++ * application for implementing a USB Audio Output device using the ++ * basic USB Audio 1.0 drivers in all modern OSes (i.e. no special drivers ++ * required). ++ * ++ * On start-up the system will automatically enumerate and function ++ * as a USB speaker. Outgoing audio will output in 8-bit PWM onto ++ * the timer 3 output compare channel A for AUDIO_OUT_MONO mode, on ++ * timer 3 channels A and B for AUDIO_OUT_STEREO and on PORTC as a signed ++ * mono sample for AUDIO_OUT_PORTC. Audio output will also be indicated on ++ * the board LEDs in all modes. Decouple audio outputs with a capacitor and ++ * attach to a speaker to hear the audio. ++ * ++ * Under Windows, if a driver request dialogue pops up, select the option ++ * to automatically install the appropriate drivers. ++ * ++ * \section Sec_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> ++ * <th><b>Define Name:</b></th> ++ * <th><b>Location:</b></th> ++ * <th><b>Description:</b></th> ++ * </tr> ++ * <tr> ++ * <td>AUDIO_OUT_STEREO</td> ++ * <td>AppConfig.h</td> ++ * <td>When defined, this outputs the audio samples in stereo to the timer output pins of the microcontroller.</td> ++ * </tr> ++ * <tr> ++ * <td>AUDIO_OUT_MONO</td> ++ * <td>AppConfig.h</td> ++ * <td>When defined, this outputs the audio samples in mono to the timer output pin of the microcontroller.</td> ++ * </tr> ++ * <tr> ++ * <td>AUDIO_OUT_PORTC</td> ++ * <td>AppConfig.h</td> ++ * <td>When defined, this outputs the audio samples in mono to port C of the microcontroller, for connection to an ++ * external DAC.</td> ++ * </tr> ++ * </table> ++ */ ++ diff --cc lib/lufa/Demos/Device/ClassDriver/AudioOutput/Config/AppConfig.h index 000000000,000000000..e93cfc813 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/AudioOutput/Config/AppConfig.h @@@ -1,0 -1,0 +1,50 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief Application Configuration Header File ++ * ++ * This is a header file which is be used to configure some of ++ * the application's compile time options, as an alternative to ++ * specifying the compile time constants supplied through a ++ * makefile or build system. ++ * ++ * For information on what each token does, refer to the ++ * \ref Sec_Options section of the application documentation. ++ */ ++ ++#ifndef _APP_CONFIG_H_ ++#define _APP_CONFIG_H_ ++ ++ #define AUDIO_OUT_STEREO ++// #define AUDIO_OUT_MONO ++// #define AUDIO_OUT_PORTC ++ ++#endif diff --cc lib/lufa/Demos/Device/ClassDriver/AudioOutput/Config/LUFAConfig.h index 000000000,000000000..6048c1d80 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/AudioOutput/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++ #define USB_DEVICE_ONLY ++// #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Device/ClassDriver/AudioOutput/Descriptors.c index 000000000,000000000..42bd528bc new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/AudioOutput/Descriptors.c @@@ -1,0 -1,0 +1,312 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special ++ * computer-readable structures which the host requests upon device enumeration, to determine ++ * the device's capabilities and functions. ++ */ ++ ++#include "Descriptors.h" ++ ++/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall ++ * device characteristics, including the supported USB version, control endpoint size and the ++ * number of device configurations. The descriptor is read out by the USB host when the enumeration ++ * process begins. ++ */ ++const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = ++{ ++ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, ++ ++ .USBSpecification = VERSION_BCD(2,0,0), ++ .Class = USB_CSCP_NoDeviceClass, ++ .SubClass = USB_CSCP_NoDeviceSubclass, ++ .Protocol = USB_CSCP_NoDeviceProtocol, ++ ++ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, ++ ++ .VendorID = 0x03EB, ++ .ProductID = 0x2046, ++ .ReleaseNumber = VERSION_BCD(0,0,2), ++ ++ .ManufacturerStrIndex = STRING_ID_Manufacturer, ++ .ProductStrIndex = STRING_ID_Product, ++ .SerialNumStrIndex = NO_DESCRIPTOR, ++ ++ .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. ++ */ ++const 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 = 2, ++ ++ .ConfigurationNumber = 1, ++ .ConfigurationStrIndex = NO_DESCRIPTOR, ++ ++ .ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED), ++ ++ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) ++ }, ++ ++ .Audio_ControlInterface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_AudioControl, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 0, ++ ++ .Class = AUDIO_CSCP_AudioClass, ++ .SubClass = AUDIO_CSCP_ControlSubclass, ++ .Protocol = AUDIO_CSCP_ControlProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .Audio_ControlInterface_SPC = ++ { ++ .Header = {.Size = sizeof(USB_Audio_Descriptor_Interface_AC_t), .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_Header, ++ ++ .ACSpecification = VERSION_BCD(1,0,0), ++ .TotalLength = (sizeof(USB_Audio_Descriptor_Interface_AC_t) + ++ sizeof(USB_Audio_Descriptor_InputTerminal_t) + ++ sizeof(USB_Audio_Descriptor_OutputTerminal_t)), ++ ++ .InCollection = 1, ++ .InterfaceNumber = INTERFACE_ID_AudioStream, ++ }, ++ ++ .Audio_InputTerminal = ++ { ++ .Header = {.Size = sizeof(USB_Audio_Descriptor_InputTerminal_t), .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_InputTerminal, ++ ++ .TerminalID = 0x01, ++ .TerminalType = AUDIO_TERMINAL_STREAMING, ++ .AssociatedOutputTerminal = 0x00, ++ ++ .TotalChannels = 2, ++ .ChannelConfig = (AUDIO_CHANNEL_LEFT_FRONT | AUDIO_CHANNEL_RIGHT_FRONT), ++ ++ .ChannelStrIndex = NO_DESCRIPTOR, ++ .TerminalStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .Audio_OutputTerminal = ++ { ++ .Header = {.Size = sizeof(USB_Audio_Descriptor_OutputTerminal_t), .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_OutputTerminal, ++ ++ .TerminalID = 0x02, ++ .TerminalType = AUDIO_TERMINAL_OUT_SPEAKER, ++ .AssociatedInputTerminal = 0x00, ++ ++ .SourceID = 0x01, ++ ++ .TerminalStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .Audio_StreamInterface_Alt0 = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_AudioStream, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 0, ++ ++ .Class = AUDIO_CSCP_AudioClass, ++ .SubClass = AUDIO_CSCP_AudioStreamingSubclass, ++ .Protocol = AUDIO_CSCP_StreamingProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .Audio_StreamInterface_Alt1 = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_AudioStream, ++ .AlternateSetting = 1, ++ ++ .TotalEndpoints = 1, ++ ++ .Class = AUDIO_CSCP_AudioClass, ++ .SubClass = AUDIO_CSCP_AudioStreamingSubclass, ++ .Protocol = AUDIO_CSCP_StreamingProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .Audio_StreamInterface_SPC = ++ { ++ .Header = {.Size = sizeof(USB_Audio_Descriptor_Interface_AS_t), .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_General, ++ ++ .TerminalLink = 0x01, ++ ++ .FrameDelay = 1, ++ .AudioFormat = 0x0001 ++ }, ++ ++ .Audio_AudioFormat = ++ { ++ .Header = {.Size = sizeof(USB_Audio_Descriptor_Format_t) + ++ sizeof(ConfigurationDescriptor.Audio_AudioFormatSampleRates), ++ .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_FormatType, ++ ++ .FormatType = 0x01, ++ .Channels = 0x02, ++ ++ .SubFrameSize = 0x02, ++ .BitResolution = 16, ++ ++ .TotalDiscreteSampleRates = (sizeof(ConfigurationDescriptor.Audio_AudioFormatSampleRates) / sizeof(USB_Audio_SampleFreq_t)), ++ }, ++ ++ .Audio_AudioFormatSampleRates = ++ { ++ AUDIO_SAMPLE_FREQ(8000), ++ AUDIO_SAMPLE_FREQ(11025), ++ AUDIO_SAMPLE_FREQ(22050), ++ AUDIO_SAMPLE_FREQ(44100), ++ AUDIO_SAMPLE_FREQ(48000), ++ }, ++ ++ .Audio_StreamEndpoint = ++ { ++ .Endpoint = ++ { ++ .Header = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Std_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = AUDIO_STREAM_EPADDR, ++ .Attributes = (EP_TYPE_ISOCHRONOUS | ENDPOINT_ATTR_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = AUDIO_STREAM_EPSIZE, ++ .PollingIntervalMS = 0x01 ++ }, ++ ++ .Refresh = 0, ++ .SyncEndpointNumber = 0 ++ }, ++ ++ .Audio_StreamEndpoint_SPC = ++ { ++ .Header = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Spc_t), .Type = DTYPE_CSEndpoint}, ++ .Subtype = AUDIO_DSUBTYPE_CSEndpoint_General, ++ ++ .Attributes = (AUDIO_EP_ACCEPTS_SMALL_PACKETS | AUDIO_EP_SAMPLE_FREQ_CONTROL), ++ ++ .LockDelayUnits = 0x00, ++ .LockDelay = 0x0000 ++ } ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_String_t PROGMEM LanguageString = USB_STRING_DESCRIPTOR_ARRAY(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"LUFA Audio Out 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 uint16_t wIndex, ++ const void** const DescriptorAddress) ++{ ++ const uint8_t DescriptorType = (wValue >> 8); ++ const uint8_t DescriptorNumber = (wValue & 0xFF); ++ ++ const void* Address = NULL; ++ uint16_t Size = NO_DESCRIPTOR; ++ ++ switch (DescriptorType) ++ { ++ case DTYPE_Device: ++ Address = &DeviceDescriptor; ++ Size = sizeof(USB_Descriptor_Device_t); ++ break; ++ case DTYPE_Configuration: ++ Address = &ConfigurationDescriptor; ++ Size = sizeof(USB_Descriptor_Configuration_t); ++ break; ++ case DTYPE_String: ++ switch (DescriptorNumber) ++ { ++ case STRING_ID_Language: ++ Address = &LanguageString; ++ Size = pgm_read_byte(&LanguageString.Header.Size); ++ break; ++ case STRING_ID_Manufacturer: ++ Address = &ManufacturerString; ++ Size = pgm_read_byte(&ManufacturerString.Header.Size); ++ break; ++ case STRING_ID_Product: ++ Address = &ProductString; ++ Size = pgm_read_byte(&ProductString.Header.Size); ++ break; ++ } ++ ++ break; ++ } ++ ++ *DescriptorAddress = Address; ++ return Size; ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/AudioOutput/Descriptors.h index 000000000,000000000..3774cc540 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/AudioOutput/Descriptors.h @@@ -1,0 -1,0 +1,106 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * Header file for Descriptors.c. ++ */ ++ ++#ifndef _DESCRIPTORS_H_ ++#define _DESCRIPTORS_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include <avr/pgmspace.h> ++ ++ #include "Config/AppConfig.h" ++ ++ /* Macros: */ ++ /** Endpoint address of the Audio isochronous streaming data OUT endpoint. */ ++ #define AUDIO_STREAM_EPADDR (ENDPOINT_DIR_OUT | 1) ++ ++ /** Endpoint size in bytes of the Audio isochronous streaming data endpoint. */ ++ #define AUDIO_STREAM_EPSIZE 256 ++ ++ /* 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; ++ ++ // Audio Control Interface ++ USB_Descriptor_Interface_t Audio_ControlInterface; ++ USB_Audio_Descriptor_Interface_AC_t Audio_ControlInterface_SPC; ++ USB_Audio_Descriptor_InputTerminal_t Audio_InputTerminal; ++ USB_Audio_Descriptor_OutputTerminal_t Audio_OutputTerminal; ++ ++ // Audio Streaming Interface ++ USB_Descriptor_Interface_t Audio_StreamInterface_Alt0; ++ USB_Descriptor_Interface_t Audio_StreamInterface_Alt1; ++ USB_Audio_Descriptor_Interface_AS_t Audio_StreamInterface_SPC; ++ USB_Audio_Descriptor_Format_t Audio_AudioFormat; ++ USB_Audio_SampleFreq_t Audio_AudioFormatSampleRates[5]; ++ USB_Audio_Descriptor_StreamEndpoint_Std_t Audio_StreamEndpoint; ++ USB_Audio_Descriptor_StreamEndpoint_Spc_t Audio_StreamEndpoint_SPC; ++ } USB_Descriptor_Configuration_t; ++ ++ /** Enum for the device interface descriptor IDs within the device. Each interface descriptor ++ * should have a unique ID index associated with it, which can be used to refer to the ++ * interface from other descriptors. ++ */ ++ enum InterfaceDescriptors_t ++ { ++ INTERFACE_ID_AudioControl = 0, /**< Audio control interface descriptor ID */ ++ INTERFACE_ID_AudioStream = 1, /**< Audio stream interface descriptor ID */ ++ }; ++ ++ /** Enum for the device string descriptor IDs within the device. Each string descriptor should ++ * have a unique ID index associated with it, which can be used to refer to the string from ++ * other descriptors. ++ */ ++ enum StringDescriptors_t ++ { ++ STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */ ++ STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */ ++ STRING_ID_Product = 2, /**< Product string ID */ ++ }; ++ ++ /* Function Prototypes: */ ++ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ++ const uint16_t wIndex, ++ const void** const DescriptorAddress) ++ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/AudioOutput/asf.xml index 000000000,000000000..f46f3a0f1 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/AudioOutput/asf.xml @@@ -1,0 -1,0 +1,50 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Audio Output Device Demo (Class Driver APIs)" id="lufa.demos.device.class.audio_output.example.avr8"> ++ <require idref="lufa.demos.device.class.audio_output"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.device.class.audio_output" caption="Audio Output Device Demo (Class Driver APIs)"> ++ <info type="description" value="summary"> ++ Audio 1.0 Output device demo, implementing a basic USB speaker. This demo uses the user-friendly USB Class Driver APIs to provide a simple, abstracted interface into the USB stack. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Class Driver APIs"/> ++ <keyword value="USB Device"/> ++ <keyword value="Audio Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="AudioOutput.txt"/> ++ ++ <build type="c-source" value="AudioOutput.c"/> ++ <build type="c-source" value="Descriptors.c"/> ++ <build type="header-file" value="AudioOutput.h"/> ++ <build type="header-file" value="Descriptors.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="module-config" subtype="required-header-file" value="AppConfig.h"/> ++ <build type="header-file" value="Config/AppConfig.h"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Device/ClassDriver/AudioOutput/doxyfile index 000000000,000000000..937ef3907 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/AudioOutput/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Audio Output 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = YES ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Device/ClassDriver/AudioOutput/makefile index 000000000,000000000..dc4c7bb1c new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/AudioOutput/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = AudioOutput ++SRC = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Device/ClassDriver/DualMIDI/Config/LUFAConfig.h index 000000000,000000000..00eefc7bf new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/DualMIDI/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,126 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++ #define USB_DEVICE_ONLY ++// #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #elif (ARCH == ARCH_XMEGA) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_RC32MCLKSRC | USB_OPT_BUSEVENT_PRIHIGH) ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++ #define MAX_ENDPOINT_INDEX 2 ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Device/ClassDriver/DualMIDI/Descriptors.c index 000000000,000000000..a286c5e9e new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/DualMIDI/Descriptors.c @@@ -1,0 -1,0 +1,366 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special ++ * computer-readable structures which the host requests upon device enumeration, to determine ++ * the device's capabilities and functions. ++ */ ++ ++#include "Descriptors.h" ++ ++/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall ++ * device characteristics, including the supported USB version, control endpoint size and the ++ * number of device configurations. The descriptor is read out by the USB host when the enumeration ++ * process begins. ++ */ ++const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = ++{ ++ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, ++ ++ .USBSpecification = VERSION_BCD(1,1,0), ++ .Class = USB_CSCP_NoDeviceClass, ++ .SubClass = USB_CSCP_NoDeviceSubclass, ++ .Protocol = USB_CSCP_NoDeviceProtocol, ++ ++ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, ++ ++ .VendorID = 0x03EB, ++ .ProductID = 0x206D, ++ .ReleaseNumber = VERSION_BCD(0,0,2), ++ ++ .ManufacturerStrIndex = STRING_ID_Manufacturer, ++ .ProductStrIndex = STRING_ID_Product, ++ .SerialNumStrIndex = NO_DESCRIPTOR, ++ ++ .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. ++ */ ++const 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 = 2, ++ ++ .ConfigurationNumber = 1, ++ .ConfigurationStrIndex = NO_DESCRIPTOR, ++ ++ .ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED), ++ ++ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) ++ }, ++ ++ .Audio_ControlInterface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_AudioControl, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 0, ++ ++ .Class = AUDIO_CSCP_AudioClass, ++ .SubClass = AUDIO_CSCP_ControlSubclass, ++ .Protocol = AUDIO_CSCP_ControlProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .Audio_ControlInterface_SPC = ++ { ++ .Header = {.Size = sizeof(USB_Audio_Descriptor_Interface_AC_t), .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_Header, ++ ++ .ACSpecification = VERSION_BCD(1,0,0), ++ .TotalLength = sizeof(USB_Audio_Descriptor_Interface_AC_t), ++ ++ .InCollection = 1, ++ .InterfaceNumber = INTERFACE_ID_AudioStream, ++ }, ++ ++ .Audio_StreamInterface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_AudioStream, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 2, ++ ++ .Class = AUDIO_CSCP_AudioClass, ++ .SubClass = AUDIO_CSCP_MIDIStreamingSubclass, ++ .Protocol = AUDIO_CSCP_StreamingProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .Audio_StreamInterface_SPC = ++ { ++ .Header = {.Size = sizeof(USB_MIDI_Descriptor_AudioInterface_AS_t), .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_General, ++ ++ .AudioSpecification = VERSION_BCD(1,0,0), ++ ++ .TotalLength = (sizeof(USB_Descriptor_Configuration_t) - ++ offsetof(USB_Descriptor_Configuration_t, Audio_StreamInterface_SPC)) ++ }, ++ ++ .MIDI_In_Jack_Emb = ++ { ++ .Header = {.Size = sizeof(USB_MIDI_Descriptor_InputJack_t), .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_InputTerminal, ++ ++ .JackType = MIDI_JACKTYPE_Embedded, ++ .JackID = 0x01, ++ ++ .JackStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .MIDI_In_Jack_Emb2 = ++ { ++ .Header = {.Size = sizeof(USB_MIDI_Descriptor_InputJack_t), .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_InputTerminal, ++ ++ .JackType = MIDI_JACKTYPE_Embedded, ++ .JackID = 0x02, ++ ++ .JackStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .MIDI_In_Jack_Ext = ++ { ++ .Header = {.Size = sizeof(USB_MIDI_Descriptor_InputJack_t), .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_InputTerminal, ++ ++ .JackType = MIDI_JACKTYPE_External, ++ .JackID = 0x03, ++ ++ .JackStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .MIDI_In_Jack_Ext2 = ++ { ++ .Header = {.Size = sizeof(USB_MIDI_Descriptor_InputJack_t), .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_InputTerminal, ++ ++ .JackType = MIDI_JACKTYPE_External, ++ .JackID = 0x04, ++ ++ .JackStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .MIDI_Out_Jack_Emb = ++ { ++ .Header = {.Size = sizeof(USB_MIDI_Descriptor_OutputJack_t), .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_OutputTerminal, ++ ++ .JackType = MIDI_JACKTYPE_Embedded, ++ .JackID = 0x05, ++ ++ .NumberOfPins = 1, ++ .SourceJackID = {0x03}, ++ .SourcePinID = {0x01}, ++ ++ .JackStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .MIDI_Out_Jack_Emb2 = ++ { ++ .Header = {.Size = sizeof(USB_MIDI_Descriptor_OutputJack_t), .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_OutputTerminal, ++ ++ .JackType = MIDI_JACKTYPE_Embedded, ++ .JackID = 0x06, ++ ++ .NumberOfPins = 1, ++ .SourceJackID = {0x04}, ++ .SourcePinID = {0x01}, ++ ++ .JackStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .MIDI_Out_Jack_Ext = ++ { ++ .Header = {.Size = sizeof(USB_MIDI_Descriptor_OutputJack_t), .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_OutputTerminal, ++ ++ .JackType = MIDI_JACKTYPE_External, ++ .JackID = 0x07, ++ ++ .NumberOfPins = 1, ++ .SourceJackID = {0x01}, ++ .SourcePinID = {0x01}, ++ ++ .JackStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .MIDI_Out_Jack_Ext2 = ++ { ++ .Header = {.Size = sizeof(USB_MIDI_Descriptor_OutputJack_t), .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_OutputTerminal, ++ ++ .JackType = MIDI_JACKTYPE_External, ++ .JackID = 0x08, ++ ++ .NumberOfPins = 1, ++ .SourceJackID = {0x02}, ++ .SourcePinID = {0x01}, ++ ++ .JackStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .MIDI_In_Jack_Endpoint = ++ { ++ .Endpoint = ++ { ++ .Header = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Std_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = MIDI_STREAM_OUT_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = MIDI_STREAM_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++ ++ .Refresh = 0, ++ .SyncEndpointNumber = 0 ++ }, ++ ++ .MIDI_In_Jack_Endpoint_SPC = ++ { ++ .Header = {.Size = sizeof(USB_MIDI_Descriptor_DualJack_Endpoint_t), .Type = DTYPE_CSEndpoint}, ++ .Subtype = AUDIO_DSUBTYPE_CSEndpoint_General, ++ ++ .TotalEmbeddedJacks = 0x02, ++ .AssociatedJackID = {0x01, 0x02} ++ }, ++ ++ .MIDI_Out_Jack_Endpoint = ++ { ++ .Endpoint = ++ { ++ .Header = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Std_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = MIDI_STREAM_IN_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = MIDI_STREAM_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++ ++ .Refresh = 0, ++ .SyncEndpointNumber = 0 ++ }, ++ ++ .MIDI_Out_Jack_Endpoint_SPC = ++ { ++ .Header = {.Size = sizeof(USB_MIDI_Descriptor_DualJack_Endpoint_t), .Type = DTYPE_CSEndpoint}, ++ .Subtype = AUDIO_DSUBTYPE_CSEndpoint_General, ++ ++ .TotalEmbeddedJacks = 0x02, ++ .AssociatedJackID = {0x05, 0x06} ++ } ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_String_t PROGMEM LanguageString = USB_STRING_DESCRIPTOR_ARRAY(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"LUFA Dual MIDI 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 uint16_t wIndex, ++ const void** const DescriptorAddress) ++{ ++ const uint8_t DescriptorType = (wValue >> 8); ++ const uint8_t DescriptorNumber = (wValue & 0xFF); ++ ++ const void* Address = NULL; ++ uint16_t Size = NO_DESCRIPTOR; ++ ++ switch (DescriptorType) ++ { ++ case DTYPE_Device: ++ Address = &DeviceDescriptor; ++ Size = sizeof(USB_Descriptor_Device_t); ++ break; ++ case DTYPE_Configuration: ++ Address = &ConfigurationDescriptor; ++ Size = sizeof(USB_Descriptor_Configuration_t); ++ break; ++ case DTYPE_String: ++ switch (DescriptorNumber) ++ { ++ case STRING_ID_Language: ++ Address = &LanguageString; ++ Size = pgm_read_byte(&LanguageString.Header.Size); ++ break; ++ case STRING_ID_Manufacturer: ++ Address = &ManufacturerString; ++ Size = pgm_read_byte(&ManufacturerString.Header.Size); ++ break; ++ case STRING_ID_Product: ++ Address = &ProductString; ++ Size = pgm_read_byte(&ProductString.Header.Size); ++ break; ++ } ++ ++ break; ++ } ++ ++ *DescriptorAddress = Address; ++ return Size; ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/DualMIDI/Descriptors.h index 000000000,000000000..a7ce6d2cd new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/DualMIDI/Descriptors.h @@@ -1,0 -1,0 +1,124 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * Header file for Descriptors.c. ++ */ ++ ++#ifndef _DESCRIPTORS_H_ ++#define _DESCRIPTORS_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include <avr/pgmspace.h> ++ ++ /* Macros: */ ++ /** Endpoint address of the MIDI streaming data IN endpoint, for device-to-host data transfers. */ ++ #define MIDI_STREAM_IN_EPADDR (ENDPOINT_DIR_IN | 2) ++ ++ /** Endpoint address of the MIDI streaming data OUT endpoint, for host-to-device data transfers. */ ++ #define MIDI_STREAM_OUT_EPADDR (ENDPOINT_DIR_OUT | 1) ++ ++ /** Endpoint size in bytes of the Audio isochronous streaming data IN and OUT endpoints. */ ++ #define MIDI_STREAM_EPSIZE 64 ++ ++ /* Type Defines: */ ++ /** Type define for a dual jack endpoint descriptor. This is identical to the LUFA MIDI class driver's ++ * USB_MIDI_Descriptor_Jack_Endpoint_t, except that it contains two jack association entries. ++ */ ++ typedef struct ++ { ++ USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length. */ ++ uint8_t Subtype; /**< Sub type value used to distinguish between audio class-specific descriptors. */ ++ ++ uint8_t TotalEmbeddedJacks; /**< Total number of jacks inside this endpoint. */ ++ uint8_t AssociatedJackID[2]; /**< IDs of each jack inside the endpoint. */ ++ } ATTR_PACKED USB_MIDI_Descriptor_DualJack_Endpoint_t; ++ ++ /** Type define for the device configuration descriptor structure. This must be defined in the ++ * application code, as the configuration descriptor contains several sub-descriptors which ++ * vary between devices, and which describe the device's usage to the host. ++ */ ++ typedef struct ++ { ++ USB_Descriptor_Configuration_Header_t Config; ++ ++ // MIDI Audio Control Interface ++ USB_Descriptor_Interface_t Audio_ControlInterface; ++ USB_Audio_Descriptor_Interface_AC_t Audio_ControlInterface_SPC; ++ ++ // MIDI Audio Streaming Interface ++ USB_Descriptor_Interface_t Audio_StreamInterface; ++ USB_MIDI_Descriptor_AudioInterface_AS_t Audio_StreamInterface_SPC; ++ USB_MIDI_Descriptor_InputJack_t MIDI_In_Jack_Emb; ++ USB_MIDI_Descriptor_InputJack_t MIDI_In_Jack_Emb2; ++ USB_MIDI_Descriptor_InputJack_t MIDI_In_Jack_Ext; ++ USB_MIDI_Descriptor_InputJack_t MIDI_In_Jack_Ext2; ++ USB_MIDI_Descriptor_OutputJack_t MIDI_Out_Jack_Emb; ++ USB_MIDI_Descriptor_OutputJack_t MIDI_Out_Jack_Emb2; ++ USB_MIDI_Descriptor_OutputJack_t MIDI_Out_Jack_Ext; ++ USB_MIDI_Descriptor_OutputJack_t MIDI_Out_Jack_Ext2; ++ USB_Audio_Descriptor_StreamEndpoint_Std_t MIDI_In_Jack_Endpoint; ++ USB_MIDI_Descriptor_DualJack_Endpoint_t MIDI_In_Jack_Endpoint_SPC; ++ USB_Audio_Descriptor_StreamEndpoint_Std_t MIDI_Out_Jack_Endpoint; ++ USB_MIDI_Descriptor_DualJack_Endpoint_t MIDI_Out_Jack_Endpoint_SPC; ++ } USB_Descriptor_Configuration_t; ++ ++ /** Enum for the device interface descriptor IDs within the device. Each interface descriptor ++ * should have a unique ID index associated with it, which can be used to refer to the ++ * interface from other descriptors. ++ */ ++ enum InterfaceDescriptors_t ++ { ++ INTERFACE_ID_AudioControl = 0, /**< Audio control interface descriptor ID */ ++ INTERFACE_ID_AudioStream = 1, /**< Audio streaming interface descriptor ID */ ++ }; ++ ++ /** Enum for the device string descriptor IDs within the device. Each string descriptor should ++ * have a unique ID index associated with it, which can be used to refer to the string from ++ * other descriptors. ++ */ ++ enum StringDescriptors_t ++ { ++ STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */ ++ STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */ ++ STRING_ID_Product = 2, /**< Product string ID */ ++ }; ++ ++ /* Function Prototypes: */ ++ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ++ const uint16_t wIndex, ++ const void** const DescriptorAddress) ++ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/DualMIDI/DualMIDI.c index 000000000,000000000..b31f60249 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/DualMIDI/DualMIDI.c @@@ -1,0 -1,0 +1,211 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 Dual MIDI demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "DualMIDI.h" ++ ++/** LUFA MIDI Class driver interface configuration and state information. This structure is ++ * passed to all MIDI Class driver functions, so that multiple instances of the same class ++ * within a device can be differentiated from one another. ++ */ ++USB_ClassInfo_MIDI_Device_t Keyboard_MIDI_Interface = ++ { ++ .Config = ++ { ++ .StreamingInterfaceNumber = INTERFACE_ID_AudioStream, ++ .DataINEndpoint = ++ { ++ .Address = MIDI_STREAM_IN_EPADDR, ++ .Size = MIDI_STREAM_EPSIZE, ++ .Banks = 1, ++ }, ++ .DataOUTEndpoint = ++ { ++ .Address = MIDI_STREAM_OUT_EPADDR, ++ .Size = MIDI_STREAM_EPSIZE, ++ .Banks = 1, ++ }, ++ }, ++ }; ++ ++ ++/** 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); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ CheckJoystickMovement(); ++ ++ MIDI_EventPacket_t ReceivedMIDIEvent; ++ while (MIDI_Device_ReceiveEventPacket(&Keyboard_MIDI_Interface, &ReceivedMIDIEvent)) ++ { ++ if ((ReceivedMIDIEvent.Event == MIDI_EVENT(0, MIDI_COMMAND_NOTE_ON)) && (ReceivedMIDIEvent.Data3 > 0)) ++ LEDs_SetAllLEDs(ReceivedMIDIEvent.Data2 > 64 ? LEDS_LED1 : LEDS_LED2); ++ else ++ LEDs_SetAllLEDs(LEDS_NO_LEDS); ++ } ++ ++ MIDI_Device_USBTask(&Keyboard_MIDI_Interface); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#elif (ARCH == ARCH_XMEGA) ++ /* Start the PLL to multiply the 2MHz RC oscillator to 32MHz and switch the CPU core to run from it */ ++ XMEGACLK_StartPLL(CLOCK_SRC_INT_RC2MHZ, 2000000, F_CPU); ++ XMEGACLK_SetCPUClockSource(CLOCK_SRC_PLL); ++ ++ /* Start the 32MHz internal RC oscillator and start the DFLL to increase it to 48MHz using the USB SOF as a reference */ ++ XMEGACLK_StartInternalOscillator(CLOCK_SRC_INT_RC32MHZ); ++ XMEGACLK_StartDFLL(CLOCK_SRC_INT_RC32MHZ, DFLL_REF_INT_USBSOF, F_USB); ++ ++ PMIC.CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm; ++#endif ++ ++ /* Hardware Initialization */ ++ Joystick_Init(); ++ LEDs_Init(); ++ Buttons_Init(); ++ USB_Init(); ++} ++ ++/** Checks for changes in the position of the board joystick, sending MIDI events to the host upon each change. */ ++void CheckJoystickMovement(void) ++{ ++ static uint8_t PrevJoystickStatus; ++ ++ uint8_t MIDICommand = 0; ++ uint8_t MIDIPitch; ++ ++ /* Get current joystick mask, XOR with previous to detect joystick changes */ ++ uint8_t JoystickStatus = Joystick_GetStatus(); ++ uint8_t JoystickChanges = (JoystickStatus ^ PrevJoystickStatus); ++ ++ /* Get board button status - if pressed use second virtual cable, otherwise use the first */ ++ uint8_t VirtualCable = (Buttons_GetStatus() & BUTTONS_BUTTON1) ? 1 : 0; ++ ++ if (JoystickChanges & JOY_LEFT) ++ { ++ MIDICommand = ((JoystickStatus & JOY_LEFT)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF); ++ MIDIPitch = 0x3C; ++ } ++ ++ if (JoystickChanges & JOY_UP) ++ { ++ MIDICommand = ((JoystickStatus & JOY_UP)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF); ++ MIDIPitch = 0x3D; ++ } ++ ++ if (JoystickChanges & JOY_RIGHT) ++ { ++ MIDICommand = ((JoystickStatus & JOY_RIGHT)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF); ++ MIDIPitch = 0x3E; ++ } ++ ++ if (JoystickChanges & JOY_DOWN) ++ { ++ MIDICommand = ((JoystickStatus & JOY_DOWN)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF); ++ MIDIPitch = 0x3F; ++ } ++ ++ if (JoystickChanges & JOY_PRESS) ++ { ++ MIDICommand = ((JoystickStatus & JOY_PRESS)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF); ++ MIDIPitch = 0x3B; ++ } ++ ++ if (MIDICommand) ++ { ++ MIDI_EventPacket_t MIDIEvent = (MIDI_EventPacket_t) ++ { ++ .Event = MIDI_EVENT(VirtualCable, MIDICommand), ++ ++ .Data1 = MIDICommand | MIDI_CHANNEL(1), ++ .Data2 = MIDIPitch, ++ .Data3 = MIDI_STANDARD_VELOCITY, ++ }; ++ ++ MIDI_Device_SendEventPacket(&Keyboard_MIDI_Interface, &MIDIEvent); ++ MIDI_Device_Flush(&Keyboard_MIDI_Interface); ++ } ++ ++ PrevJoystickStatus = JoystickStatus; ++} ++ ++/** 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) ++{ ++ bool ConfigSuccess = true; ++ ++ ConfigSuccess &= MIDI_Device_ConfigureEndpoints(&Keyboard_MIDI_Interface); ++ ++ LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); ++} ++ ++/** Event handler for the library USB Control Request reception event. */ ++void EVENT_USB_Device_ControlRequest(void) ++{ ++ MIDI_Device_ProcessControlRequest(&Keyboard_MIDI_Interface); ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/DualMIDI/DualMIDI.h index 000000000,000000000..3b0dac3be new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/DualMIDI/DualMIDI.h @@@ -1,0 -1,0 +1,78 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 DualMIDI.c. ++ */ ++ ++#ifndef _DUAL_MIDI_H_ ++#define _DUAL_MIDI_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <stdbool.h> ++ #include <string.h> ++ ++ #include "Descriptors.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/Platform/Platform.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_ControlRequest(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/DualMIDI/DualMIDI.txt index 000000000,000000000..19d4dbc04 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/DualMIDI/DualMIDI.txt @@@ -1,0 -1,0 +1,78 @@@ ++/** \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 MIDI Dual Input Device Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * \li Series 6 USB AVRs (AT90USBxxx6) ++ * \li Series 4 USB AVRs (ATMEGAxxU4) ++ * \li Series 2 USB AVRs (AT90USBxx2, ATMEGAxxU2) ++ * \li Series AU XMEGA AVRs (ATXMEGAxxxAxU) ++ * \li Series B XMEGA AVRs (ATXMEGAxxxBx) ++ * \li Series C XMEGA AVRs (ATXMEGAxxxCx) ++ * ++ * \section Sec_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>Audio Class</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>Standard Audio Device</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF Audio Class Specification \n ++ * USB-MIDI Audio Class Extension Specification \n ++ * General MIDI Specification</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Dual MIDI demonstration application. This gives a simple reference ++ * application for implementing the USB-MIDI class in USB devices. ++ * It is built upon the USB Audio class. ++ * ++ * Joystick movements are translated into note on/off messages and ++ * are sent to the host PC as MIDI streams which can be read by any ++ * MIDI program supporting MIDI IN devices. ++ * ++ * If the HWB is not pressed, the first virtual MIDI cable to the host is ++ * used. If the HWB is pressed, then the second virtual cable is selected. ++ * ++ * This device implements MIDI-THRU mode, with the IN MIDI data being ++ * generated by the device itself. OUT MIDI data is discarded. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Device/ClassDriver/DualMIDI/asf.xml index 000000000,000000000..ba85a3b56 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/DualMIDI/asf.xml @@@ -1,0 -1,0 +1,62 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Dual MIDI Device Demo (Class Driver APIs)" id="lufa.demos.device.class.dual_midi.example.avr8"> ++ <require idref="lufa.demos.device.class.dual_midi"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <project caption="MIDI Device Demo (Class Driver APIs)" id="lufa.demos.device.class.dual_midi.example.xmega"> ++ <require idref="lufa.demos.device.class.dual_midi"/> ++ <require idref="lufa.boards.dummy.xmega"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atxmega128a1u"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="32000000UL"/> ++ <build type="define" name="F_USB" value="48000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.device.class.dual_midi" caption="Dual MIDI Device Demo (Class Driver APIs)"> ++ <info type="description" value="summary"> ++ Dual MIDI device demo, implementing a basic USB MIDI device with two virtual cables that can send messages to the host. This demo uses the user-friendly USB Class Driver APIs to provide a simple, abstracted interface into the USB stack. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Class Driver APIs"/> ++ <keyword value="USB Device"/> ++ <keyword value="MIDI Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="DualMIDI.txt"/> ++ ++ <build type="c-source" value="DualMIDI.c"/> ++ <build type="c-source" value="Descriptors.c"/> ++ <build type="header-file" value="DualMIDI.h"/> ++ <build type="header-file" value="Descriptors.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ <require idref="lufa.drivers.board.buttons"/> ++ <require idref="lufa.drivers.board.joystick"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Device/ClassDriver/DualMIDI/doxyfile index 000000000,000000000..879aae3e8 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/DualMIDI/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Dual MIDI 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Device/ClassDriver/DualMIDI/makefile index 000000000,000000000..04e06d1df new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/DualMIDI/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = DualMIDI ++SRC = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Device/ClassDriver/DualVirtualSerial/Config/LUFAConfig.h index 000000000,000000000..070eac471 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/DualVirtualSerial/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,126 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++ #define USB_DEVICE_ONLY ++// #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++ #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #elif (ARCH == ARCH_XMEGA) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_RC32MCLKSRC | USB_OPT_BUSEVENT_PRIHIGH) ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++ #define MAX_ENDPOINT_INDEX 6 ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Device/ClassDriver/DualVirtualSerial/Descriptors.c index 000000000,000000000..553223a2b new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/DualVirtualSerial/Descriptors.c @@@ -1,0 -1,0 +1,360 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special ++ * computer-readable structures which the host requests upon device enumeration, to determine ++ * the device's capabilities and functions. ++ */ ++ ++#include "Descriptors.h" ++ ++ ++/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall ++ * device characteristics, including the supported USB version, control endpoint size and the ++ * number of device configurations. The descriptor is read out by the USB host when the enumeration ++ * process begins. ++ */ ++const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = ++{ ++ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, ++ ++ .USBSpecification = VERSION_BCD(1,1,0), ++ .Class = USB_CSCP_IADDeviceClass, ++ .SubClass = USB_CSCP_IADDeviceSubclass, ++ .Protocol = USB_CSCP_IADDeviceProtocol, ++ ++ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, ++ ++ .VendorID = 0x03EB, ++ .ProductID = 0x204E, ++ .ReleaseNumber = VERSION_BCD(0,0,1), ++ ++ .ManufacturerStrIndex = STRING_ID_Manufacturer, ++ .ProductStrIndex = STRING_ID_Product, ++ .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. ++ */ ++const 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 = 4, ++ ++ .ConfigurationNumber = 1, ++ .ConfigurationStrIndex = NO_DESCRIPTOR, ++ ++ .ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED), ++ ++ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) ++ }, ++ ++ .CDC1_IAD = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation}, ++ ++ .FirstInterfaceIndex = INTERFACE_ID_CDC1_CCI, ++ .TotalInterfaces = 2, ++ ++ .Class = CDC_CSCP_CDCClass, ++ .SubClass = CDC_CSCP_ACMSubclass, ++ .Protocol = CDC_CSCP_ATCommandProtocol, ++ ++ .IADStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .CDC1_CCI_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_CDC1_CCI, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 1, ++ ++ .Class = CDC_CSCP_CDCClass, ++ .SubClass = CDC_CSCP_ACMSubclass, ++ .Protocol = CDC_CSCP_ATCommandProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .CDC1_Functional_Header = ++ { ++ .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface}, ++ .Subtype = CDC_DSUBTYPE_CSInterface_Header, ++ ++ .CDCSpecification = VERSION_BCD(1,1,0), ++ }, ++ ++ .CDC1_Functional_ACM = ++ { ++ .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface}, ++ .Subtype = CDC_DSUBTYPE_CSInterface_ACM, ++ ++ .Capabilities = 0x06, ++ }, ++ ++ .CDC1_Functional_Union = ++ { ++ .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface}, ++ .Subtype = CDC_DSUBTYPE_CSInterface_Union, ++ ++ .MasterInterfaceNumber = INTERFACE_ID_CDC1_CCI, ++ .SlaveInterfaceNumber = INTERFACE_ID_CDC1_DCI, ++ }, ++ ++ .CDC1_ManagementEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = CDC1_NOTIFICATION_EPADDR, ++ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = CDC_NOTIFICATION_EPSIZE, ++ .PollingIntervalMS = 0xFF ++ }, ++ ++ .CDC1_DCI_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_CDC1_DCI, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 2, ++ ++ .Class = CDC_CSCP_CDCDataClass, ++ .SubClass = CDC_CSCP_NoDataSubclass, ++ .Protocol = CDC_CSCP_NoDataProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .CDC1_DataOutEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = CDC1_RX_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = CDC_TXRX_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++ ++ .CDC1_DataInEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = CDC1_TX_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = CDC_TXRX_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++ ++ .CDC2_IAD = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation}, ++ ++ .FirstInterfaceIndex = INTERFACE_ID_CDC2_CCI, ++ .TotalInterfaces = 2, ++ ++ .Class = CDC_CSCP_CDCClass, ++ .SubClass = CDC_CSCP_ACMSubclass, ++ .Protocol = CDC_CSCP_ATCommandProtocol, ++ ++ .IADStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .CDC2_CCI_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_CDC2_CCI, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 1, ++ ++ .Class = CDC_CSCP_CDCClass, ++ .SubClass = CDC_CSCP_ACMSubclass, ++ .Protocol = CDC_CSCP_ATCommandProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .CDC2_Functional_Header = ++ { ++ .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface}, ++ .Subtype = CDC_DSUBTYPE_CSInterface_Header, ++ ++ .CDCSpecification = VERSION_BCD(1,1,0), ++ }, ++ ++ .CDC2_Functional_ACM = ++ { ++ .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface}, ++ .Subtype = CDC_DSUBTYPE_CSInterface_ACM, ++ ++ .Capabilities = 0x06, ++ }, ++ ++ .CDC2_Functional_Union = ++ { ++ .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface}, ++ .Subtype = CDC_DSUBTYPE_CSInterface_Union, ++ ++ .MasterInterfaceNumber = INTERFACE_ID_CDC2_CCI, ++ .SlaveInterfaceNumber = INTERFACE_ID_CDC2_DCI, ++ }, ++ ++ .CDC2_ManagementEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = CDC2_NOTIFICATION_EPADDR, ++ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = CDC_NOTIFICATION_EPSIZE, ++ .PollingIntervalMS = 0xFF ++ }, ++ ++ .CDC2_DCI_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_CDC2_DCI, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 2, ++ ++ .Class = CDC_CSCP_CDCDataClass, ++ .SubClass = CDC_CSCP_NoDataSubclass, ++ .Protocol = CDC_CSCP_NoDataProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .CDC2_DataOutEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = CDC2_RX_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = CDC_TXRX_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++ ++ .CDC2_DataInEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = CDC2_TX_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = CDC_TXRX_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ } ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_String_t PROGMEM LanguageString = USB_STRING_DESCRIPTOR_ARRAY(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"LUFA Dual CDC 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 uint16_t wIndex, ++ const void** const DescriptorAddress) ++{ ++ const uint8_t DescriptorType = (wValue >> 8); ++ const uint8_t DescriptorNumber = (wValue & 0xFF); ++ ++ const void* Address = NULL; ++ uint16_t Size = NO_DESCRIPTOR; ++ ++ switch (DescriptorType) ++ { ++ case DTYPE_Device: ++ Address = &DeviceDescriptor; ++ Size = sizeof(USB_Descriptor_Device_t); ++ break; ++ case DTYPE_Configuration: ++ Address = &ConfigurationDescriptor; ++ Size = sizeof(USB_Descriptor_Configuration_t); ++ break; ++ case DTYPE_String: ++ switch (DescriptorNumber) ++ { ++ case STRING_ID_Language: ++ Address = &LanguageString; ++ Size = pgm_read_byte(&LanguageString.Header.Size); ++ break; ++ case STRING_ID_Manufacturer: ++ Address = &ManufacturerString; ++ Size = pgm_read_byte(&ManufacturerString.Header.Size); ++ break; ++ case STRING_ID_Product: ++ Address = &ProductString; ++ Size = pgm_read_byte(&ProductString.Header.Size); ++ break; ++ } ++ ++ break; ++ } ++ ++ *DescriptorAddress = Address; ++ return Size; ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/DualVirtualSerial/Descriptors.h index 000000000,000000000..dfc7a7793 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/DualVirtualSerial/Descriptors.h @@@ -1,0 -1,0 +1,135 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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> ++ ++ /* Macros: */ ++ /** Endpoint address of the first CDC interface's device-to-host data IN endpoint. */ ++ #define CDC1_TX_EPADDR (ENDPOINT_DIR_IN | 1) ++ ++ /** Endpoint address of the first CDC interface's host-to-device data OUT endpoint. */ ++ #define CDC1_RX_EPADDR (ENDPOINT_DIR_OUT | 2) ++ ++ /** Endpoint address of the first CDC interface's device-to-host notification IN endpoint. */ ++ #define CDC1_NOTIFICATION_EPADDR (ENDPOINT_DIR_IN | 3) ++ ++ /** Endpoint address of the second CDC interface's device-to-host data IN endpoint. */ ++ #define CDC2_TX_EPADDR (ENDPOINT_DIR_IN | 4) ++ ++ /** Endpoint address of the second CDC interface's host-to-device data OUT endpoint. */ ++ #define CDC2_RX_EPADDR (ENDPOINT_DIR_OUT | 5) ++ ++ /** Endpoint address of the second CDC interface's device-to-host notification IN endpoint. */ ++ #define CDC2_NOTIFICATION_EPADDR (ENDPOINT_DIR_IN | 6) ++ ++ /** Size in bytes of the CDC device-to-host notification IN endpoints. */ ++ #define CDC_NOTIFICATION_EPSIZE 8 ++ ++ /** Size in bytes of the CDC data IN and OUT endpoints. */ ++ #define CDC_TXRX_EPSIZE 16 ++ ++ /* Type Defines: */ ++ /** Type define for the device configuration descriptor structure. This must be defined in the ++ * application code, as the configuration descriptor contains several sub-descriptors which ++ * vary between devices, and which describe the device's usage to the host. ++ */ ++ typedef struct ++ { ++ USB_Descriptor_Configuration_Header_t Config; ++ ++ // First CDC Control Interface ++ USB_Descriptor_Interface_Association_t CDC1_IAD; ++ USB_Descriptor_Interface_t CDC1_CCI_Interface; ++ USB_CDC_Descriptor_FunctionalHeader_t CDC1_Functional_Header; ++ USB_CDC_Descriptor_FunctionalACM_t CDC1_Functional_ACM; ++ USB_CDC_Descriptor_FunctionalUnion_t CDC1_Functional_Union; ++ USB_Descriptor_Endpoint_t CDC1_ManagementEndpoint; ++ ++ // First CDC Data Interface ++ USB_Descriptor_Interface_t CDC1_DCI_Interface; ++ USB_Descriptor_Endpoint_t CDC1_DataOutEndpoint; ++ USB_Descriptor_Endpoint_t CDC1_DataInEndpoint; ++ ++ // Second CDC Control Interface ++ USB_Descriptor_Interface_Association_t CDC2_IAD; ++ USB_Descriptor_Interface_t CDC2_CCI_Interface; ++ USB_CDC_Descriptor_FunctionalHeader_t CDC2_Functional_Header; ++ USB_CDC_Descriptor_FunctionalACM_t CDC2_Functional_ACM; ++ USB_CDC_Descriptor_FunctionalUnion_t CDC2_Functional_Union; ++ USB_Descriptor_Endpoint_t CDC2_ManagementEndpoint; ++ ++ // Second CDC Data Interface ++ USB_Descriptor_Interface_t CDC2_DCI_Interface; ++ USB_Descriptor_Endpoint_t CDC2_DataOutEndpoint; ++ USB_Descriptor_Endpoint_t CDC2_DataInEndpoint; ++ } USB_Descriptor_Configuration_t; ++ ++ /** Enum for the device interface descriptor IDs within the device. Each interface descriptor ++ * should have a unique ID index associated with it, which can be used to refer to the ++ * interface from other descriptors. ++ */ ++ enum InterfaceDescriptors_t ++ { ++ INTERFACE_ID_CDC1_CCI = 0, /**< CDC1 CCI interface descriptor ID */ ++ INTERFACE_ID_CDC1_DCI = 1, /**< CDC1 DCI interface descriptor ID */ ++ INTERFACE_ID_CDC2_CCI = 2, /**< CDC2 CCI interface descriptor ID */ ++ INTERFACE_ID_CDC2_DCI = 3, /**< CDC2 DCI interface descriptor ID */ ++ }; ++ ++ /** Enum for the device string descriptor IDs within the device. Each string descriptor should ++ * have a unique ID index associated with it, which can be used to refer to the string from ++ * other descriptors. ++ */ ++ enum StringDescriptors_t ++ { ++ STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */ ++ STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */ ++ STRING_ID_Product = 2, /**< Product string ID */ ++ }; ++ ++ /* Function Prototypes: */ ++ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ++ const uint16_t wIndex, ++ const void** const DescriptorAddress) ++ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/DualVirtualSerial/DualVirtualSerial.c index 000000000,000000000..9a7ff4725 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/DualVirtualSerial/DualVirtualSerial.c @@@ -1,0 -1,0 +1,242 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 DualVirtualSerial demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "DualVirtualSerial.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. This is for the first CDC interface, ++ * which sends strings to the host for each joystick movement. ++ */ ++USB_ClassInfo_CDC_Device_t VirtualSerial1_CDC_Interface = ++ { ++ .Config = ++ { ++ .ControlInterfaceNumber = INTERFACE_ID_CDC1_CCI, ++ .DataINEndpoint = ++ { ++ .Address = CDC1_TX_EPADDR, ++ .Size = CDC_TXRX_EPSIZE, ++ .Banks = 1, ++ }, ++ .DataOUTEndpoint = ++ { ++ .Address = CDC1_RX_EPADDR, ++ .Size = CDC_TXRX_EPSIZE, ++ .Banks = 1, ++ }, ++ .NotificationEndpoint = ++ { ++ .Address = CDC1_NOTIFICATION_EPADDR, ++ .Size = CDC_NOTIFICATION_EPSIZE, ++ .Banks = 1, ++ }, ++ }, ++ }; ++ ++/** 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. This is for the second CDC interface, ++ * which echos back all received data from the host. ++ */ ++USB_ClassInfo_CDC_Device_t VirtualSerial2_CDC_Interface = ++ { ++ .Config = ++ { ++ .ControlInterfaceNumber = INTERFACE_ID_CDC2_CCI, ++ .DataINEndpoint = ++ { ++ .Address = CDC2_TX_EPADDR, ++ .Size = CDC_TXRX_EPSIZE, ++ .Banks = 1, ++ }, ++ .DataOUTEndpoint = ++ { ++ .Address = CDC2_RX_EPADDR, ++ .Size = CDC_TXRX_EPSIZE, ++ .Banks = 1, ++ }, ++ .NotificationEndpoint = ++ { ++ .Address = CDC2_NOTIFICATION_EPADDR, ++ .Size = CDC_NOTIFICATION_EPSIZE, ++ .Banks = 1, ++ }, ++ ++ }, ++ }; ++ ++ ++/** 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); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ CheckJoystickMovement(); ++ ++ /* Discard all received data on the first CDC interface */ ++ CDC_Device_ReceiveByte(&VirtualSerial1_CDC_Interface); ++ ++ /* Echo all received data on the second CDC interface */ ++ int16_t ReceivedByte = CDC_Device_ReceiveByte(&VirtualSerial2_CDC_Interface); ++ if (!(ReceivedByte < 0)) ++ CDC_Device_SendByte(&VirtualSerial2_CDC_Interface, (uint8_t)ReceivedByte); ++ ++ CDC_Device_USBTask(&VirtualSerial1_CDC_Interface); ++ CDC_Device_USBTask(&VirtualSerial2_CDC_Interface); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#elif (ARCH == ARCH_XMEGA) ++ /* Start the PLL to multiply the 2MHz RC oscillator to 32MHz and switch the CPU core to run from it */ ++ XMEGACLK_StartPLL(CLOCK_SRC_INT_RC2MHZ, 2000000, F_CPU); ++ XMEGACLK_SetCPUClockSource(CLOCK_SRC_PLL); ++ ++ /* Start the 32MHz internal RC oscillator and start the DFLL to increase it to 48MHz using the USB SOF as a reference */ ++ XMEGACLK_StartInternalOscillator(CLOCK_SRC_INT_RC32MHZ); ++ XMEGACLK_StartDFLL(CLOCK_SRC_INT_RC32MHZ, DFLL_REF_INT_USBSOF, F_USB); ++ ++ PMIC.CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm; ++#endif ++ ++ /* 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 ++ * through the first of the CDC interfaces. ++ */ ++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(&VirtualSerial1_CDC_Interface, 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) ++{ ++ bool ConfigSuccess = true; ++ ++ ConfigSuccess &= CDC_Device_ConfigureEndpoints(&VirtualSerial1_CDC_Interface); ++ ConfigSuccess &= CDC_Device_ConfigureEndpoints(&VirtualSerial2_CDC_Interface); ++ ++ LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); ++} ++ ++/** Event handler for the library USB Control Request reception event. */ ++void EVENT_USB_Device_ControlRequest(void) ++{ ++ CDC_Device_ProcessControlRequest(&VirtualSerial1_CDC_Interface); ++ CDC_Device_ProcessControlRequest(&VirtualSerial2_CDC_Interface); ++} ++ ++/** CDC class driver callback function the processing of changes to the virtual ++ * control lines sent from the host.. ++ * ++ * \param[in] CDCInterfaceInfo Pointer to the CDC class interface configuration structure being referenced ++ */ ++void EVENT_CDC_Device_ControLineStateChanged(USB_ClassInfo_CDC_Device_t *const CDCInterfaceInfo) ++{ ++ /* You can get changes to the virtual CDC lines in this callback; a common ++ use-case is to use the Data Terminal Ready (DTR) flag to enable and ++ disable CDC communications in your application when set to avoid the ++ application blocking while waiting for a host to become ready and read ++ in the pending data from the USB endpoints. ++ */ ++ bool HostReady = (CDCInterfaceInfo->State.ControlLineStates.HostToDevice & CDC_CONTROL_LINE_OUT_DTR) != 0; ++ ++ if (CDCInterfaceInfo == &VirtualSerial1_CDC_Interface) ++ { ++ // CDC interface 1's host is ready to send/receive data ++ } ++ else ++ { ++ // CDC interface 2's host is ready to send/receive data ++ } ++} diff --cc lib/lufa/Demos/Device/ClassDriver/DualVirtualSerial/DualVirtualSerial.h index 000000000,000000000..28d125adf new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/DualVirtualSerial/DualVirtualSerial.h @@@ -1,0 -1,0 +1,76 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 DualVirtualSerial.c. ++ */ ++ ++#ifndef _DUAL_VIRTUALSERIAL_H_ ++#define _DUAL_VIRTUALSERIAL_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <string.h> ++ ++ #include "Descriptors.h" ++ ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/Board/Joystick.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Platform/Platform.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_ControlRequest(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/DualVirtualSerial/DualVirtualSerial.txt index 000000000,000000000..c325e9ced new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/DualVirtualSerial/DualVirtualSerial.txt @@@ -1,0 -1,0 +1,89 @@@ ++/** \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 Dual Communications Device Class (Dual Virtual Serial Port) Device ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * \li Series 6 USB AVRs (AT90USBxxx6) ++ * \li Series 4 USB AVRs (ATMEGAxxU4) ++ * \li Series AU XMEGA AVRs (ATXMEGAxxxAxU) ++ * \li Series B XMEGA AVRs (ATXMEGAxxxBx) ++ * \li Series C XMEGA AVRs (ATXMEGAxxxCx) ++ * ++ * \section Sec_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> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>Abstract Control Model (ACM)</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF CDC Class Standard</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF Interface Association Descriptor ECN \n ++ * USBIF CDC Class Standard</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Dual Communications Device Class demonstration application. ++ * This gives a simple reference application for implementing ++ * a composite device with dual CDC functions acting as a pair ++ * of virtual serial ports. This demo uses Interface Association ++ * Descriptors to link together the pair of related CDC ++ * descriptors for each virtual serial port, which may not be ++ * supported in all OSes - Windows Vista is supported, as is ++ * XP (although the latter may need a hotfix to function). ++ * ++ * Joystick actions are transmitted to the host as strings ++ * through the first serial port. The device does not respond to ++ * serial data sent from the host in the first serial port. ++ * ++ * The second serial port echoes back 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 Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Device/ClassDriver/DualVirtualSerial/LUFA DualVirtualSerial.inf index 000000000,000000000..1a0e0248a new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/DualVirtualSerial/LUFA DualVirtualSerial.inf @@@ -1,0 -1,0 +1,66 @@@ ++;************************************************************ ++; Windows USB CDC ACM Setup File ++; Copyright (c) 2000 Microsoft Corporation ++;************************************************************ ++ ++[DefaultInstall] ++CopyINF="LUFA DualVirtualSerial.inf" ++ ++[Version] ++Signature="$Windows NT$" ++Class=Ports ++ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} ++Provider=%MFGNAME% ++DriverVer=7/1/2012,10.0.0.0 ++ ++[Manufacturer] ++%MFGNAME%=DeviceList, NTx86, NTamd64, NTia64 ++ ++[SourceDisksNames] ++ ++[SourceDisksFiles] ++ ++[DestinationDirs] ++DefaultDestDir=12 ++ ++[DriverInstall] ++Include=mdmcpq.inf ++CopyFiles=FakeModemCopyFileSection ++AddReg=DriverInstall.AddReg ++ ++[DriverInstall.Services] ++Include=mdmcpq.inf ++AddService=usbser, 0x00000002, LowerFilter_Service_Inst ++ ++[DriverInstall.AddReg] ++HKR,,EnumPropPages32,,"msports.dll,SerialPortPropPageProvider" ++ ++;------------------------------------------------------------------------------ ++; 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. ++;------------------------------------------------------------------------------ ++[DeviceList] ++%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_204E&MI_00, USB\VID_03EB&PID_204E&MI_02 ++ ++[DeviceList.NTx86] ++%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_204E&MI_00, USB\VID_03EB&PID_204E&MI_02 ++ ++[DeviceList.NTamd64] ++%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_204E&MI_00, USB\VID_03EB&PID_204E&MI_02 ++ ++[DeviceList.NTia64] ++%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_204E&MI_00, USB\VID_03EB&PID_204E&MI_02 ++ ++;------------------------------------------------------------------------------ ++; String Definitions ++;------------------------------------------------------------------------------ ++;Modify these strings to customize your device ++;------------------------------------------------------------------------------ ++[Strings] ++MFGNAME="http://www.lufa-lib.org" ++DESCRIPTION="LUFA CDC-ACM Virtual Serial Port" diff --cc lib/lufa/Demos/Device/ClassDriver/DualVirtualSerial/asf.xml index 000000000,000000000..e00f33995 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/DualVirtualSerial/asf.xml @@@ -1,0 -1,0 +1,62 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Dual Virtual Serial Device Demo (Class Driver APIs)" id="lufa.demos.device.class.dual_cdc.example.avr8"> ++ <require idref="lufa.demos.device.class.dual_cdc"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <project caption="Dual Virtual Serial Device Demo (Class Driver APIs)" id="lufa.demos.device.class.dual_cdc.example.xmega"> ++ <require idref="lufa.demos.device.class.dual_cdc"/> ++ <require idref="lufa.boards.dummy.xmega"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atxmega128a1u"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="32000000UL"/> ++ <build type="define" name="F_USB" value="48000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.device.class.dual_cdc" caption="Dual Virtual Serial Device Demo (Class Driver APIs)"> ++ <info type="description" value="summary"> ++ Dual Virtual Serial (CDC) demo, implementing a pair of virtual serial port interfaces. This demo uses the user-friendly USB Class Driver APIs to provide a simple, abstracted interface into the USB stack. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Class Driver APIs"/> ++ <keyword value="USB Device"/> ++ <keyword value="CDC Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="DualVirtualSerial.txt"/> ++ <build type="distribute" subtype="user-file" value="LUFA DualVirtualSerial.inf"/> ++ ++ <build type="c-source" value="DualVirtualSerial.c"/> ++ <build type="c-source" value="Descriptors.c"/> ++ <build type="header-file" value="DualVirtualSerial.h"/> ++ <build type="header-file" value="Descriptors.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ <require idref="lufa.drivers.board.joystick"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Device/ClassDriver/DualVirtualSerial/doxyfile index 000000000,000000000..40dcfe915 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/DualVirtualSerial/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Dual Virtual Serial 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Device/ClassDriver/DualVirtualSerial/makefile index 000000000,000000000..3bdd0259b new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/DualVirtualSerial/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = DualVirtualSerial ++SRC = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Device/ClassDriver/GenericHID/Config/AppConfig.h index 000000000,000000000..636200ec6 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/GenericHID/Config/AppConfig.h @@@ -1,0 -1,0 +1,48 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief Application Configuration Header File ++ * ++ * This is a header file which is be used to configure some of ++ * the application's compile time options, as an alternative to ++ * specifying the compile time constants supplied through a ++ * makefile or build system. ++ * ++ * For information on what each token does, refer to the ++ * \ref Sec_Options section of the application documentation. ++ */ ++ ++#ifndef _APP_CONFIG_H_ ++#define _APP_CONFIG_H_ ++ ++ #define GENERIC_REPORT_SIZE 8 ++ ++#endif diff --cc lib/lufa/Demos/Device/ClassDriver/GenericHID/Config/LUFAConfig.h index 000000000,000000000..299d2ec85 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/GenericHID/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,126 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++ #define USB_DEVICE_ONLY ++// #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #elif (ARCH == ARCH_XMEGA) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_RC32MCLKSRC | USB_OPT_BUSEVENT_PRIHIGH) ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++ #define MAX_ENDPOINT_INDEX 1 ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Device/ClassDriver/GenericHID/Descriptors.c index 000000000,000000000..c0f1b0de9 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/GenericHID/Descriptors.c @@@ -1,0 -1,0 +1,220 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special ++ * computer-readable structures which the host requests upon device enumeration, to determine ++ * the device's capabilities and functions. ++ */ ++ ++#include "Descriptors.h" ++ ++/** HID class report descriptor. This is a special descriptor constructed with values from the ++ * USBIF HID class specification to describe the reports and capabilities of the HID device. This ++ * descriptor is parsed by the host and its contents used to determine what data (and in what encoding) ++ * the device will send, and what it may be sent back from the host. Refer to the HID specification for ++ * more details on HID report descriptors. ++ */ ++const USB_Descriptor_HIDReport_Datatype_t PROGMEM GenericReport[] = ++{ ++ /* Use the HID class driver's standard Vendor HID report. ++ * Vendor Usage Page: 0 ++ * Vendor Collection Usage: 1 ++ * Vendor Report IN Usage: 2 ++ * Vendor Report OUT Usage: 3 ++ * Vendor Report Size: GENERIC_REPORT_SIZE ++ */ ++ HID_DESCRIPTOR_VENDOR(0x00, 0x01, 0x02, 0x03, GENERIC_REPORT_SIZE) ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = ++{ ++ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, ++ ++ .USBSpecification = VERSION_BCD(1,1,0), ++ .Class = USB_CSCP_NoDeviceClass, ++ .SubClass = USB_CSCP_NoDeviceSubclass, ++ .Protocol = USB_CSCP_NoDeviceProtocol, ++ ++ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, ++ ++ .VendorID = 0x03EB, ++ .ProductID = 0x204F, ++ .ReleaseNumber = VERSION_BCD(0,0,1), ++ ++ .ManufacturerStrIndex = STRING_ID_Manufacturer, ++ .ProductStrIndex = STRING_ID_Product, ++ .SerialNumStrIndex = NO_DESCRIPTOR, ++ ++ .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. ++ */ ++const 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 = 1, ++ ++ .ConfigurationNumber = 1, ++ .ConfigurationStrIndex = NO_DESCRIPTOR, ++ ++ .ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED), ++ ++ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) ++ }, ++ ++ .HID_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_GenericHID, ++ .AlternateSetting = 0x00, ++ ++ .TotalEndpoints = 1, ++ ++ .Class = HID_CSCP_HIDClass, ++ .SubClass = HID_CSCP_NonBootSubclass, ++ .Protocol = HID_CSCP_NonBootProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .HID_GenericHID = ++ { ++ .Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID}, ++ ++ .HIDSpec = VERSION_BCD(1,1,1), ++ .CountryCode = 0x00, ++ .TotalReportDescriptors = 1, ++ .HIDReportType = HID_DTYPE_Report, ++ .HIDReportLength = sizeof(GenericReport) ++ }, ++ ++ .HID_ReportINEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = GENERIC_IN_EPADDR, ++ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = GENERIC_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_String_t PROGMEM LanguageString = USB_STRING_DESCRIPTOR_ARRAY(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"LUFA Generic HID 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 uint16_t wIndex, ++ const void** const DescriptorAddress) ++{ ++ const uint8_t DescriptorType = (wValue >> 8); ++ const uint8_t DescriptorNumber = (wValue & 0xFF); ++ ++ const void* Address = NULL; ++ uint16_t Size = NO_DESCRIPTOR; ++ ++ switch (DescriptorType) ++ { ++ case DTYPE_Device: ++ Address = &DeviceDescriptor; ++ Size = sizeof(USB_Descriptor_Device_t); ++ break; ++ case DTYPE_Configuration: ++ Address = &ConfigurationDescriptor; ++ Size = sizeof(USB_Descriptor_Configuration_t); ++ break; ++ case DTYPE_String: ++ switch (DescriptorNumber) ++ { ++ case STRING_ID_Language: ++ Address = &LanguageString; ++ Size = pgm_read_byte(&LanguageString.Header.Size); ++ break; ++ case STRING_ID_Manufacturer: ++ Address = &ManufacturerString; ++ Size = pgm_read_byte(&ManufacturerString.Header.Size); ++ break; ++ case STRING_ID_Product: ++ Address = &ProductString; ++ Size = pgm_read_byte(&ProductString.Header.Size); ++ break; ++ } ++ ++ break; ++ case HID_DTYPE_HID: ++ Address = &ConfigurationDescriptor.HID_GenericHID; ++ Size = sizeof(USB_HID_Descriptor_HID_t); ++ break; ++ case HID_DTYPE_Report: ++ Address = &GenericReport; ++ Size = sizeof(GenericReport); ++ break; ++ } ++ ++ *DescriptorAddress = Address; ++ return Size; ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/GenericHID/Descriptors.h index 000000000,000000000..4fa644ff2 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/GenericHID/Descriptors.h @@@ -1,0 -1,0 +1,95 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 "Config/AppConfig.h" ++ ++ /* 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; ++ ++ // Generic HID Interface ++ USB_Descriptor_Interface_t HID_Interface; ++ USB_HID_Descriptor_HID_t HID_GenericHID; ++ USB_Descriptor_Endpoint_t HID_ReportINEndpoint; ++ } USB_Descriptor_Configuration_t; ++ ++ /** Enum for the device interface descriptor IDs within the device. Each interface descriptor ++ * should have a unique ID index associated with it, which can be used to refer to the ++ * interface from other descriptors. ++ */ ++ enum InterfaceDescriptors_t ++ { ++ INTERFACE_ID_GenericHID = 0, /**< GenericHID interface descriptor ID */ ++ }; ++ ++ /** Enum for the device string descriptor IDs within the device. Each string descriptor should ++ * have a unique ID index associated with it, which can be used to refer to the string from ++ * other descriptors. ++ */ ++ enum StringDescriptors_t ++ { ++ STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */ ++ STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */ ++ STRING_ID_Product = 2, /**< Product string ID */ ++ }; ++ ++ /* Macros: */ ++ /** Endpoint address of the Generic HID reporting IN endpoint. */ ++ #define GENERIC_IN_EPADDR (ENDPOINT_DIR_IN | 1) ++ ++ /** Size in bytes of the Generic HID reporting endpoint. */ ++ #define GENERIC_EPSIZE 8 ++ ++ /* Function Prototypes: */ ++ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ++ const uint16_t wIndex, ++ const void** const DescriptorAddress) ++ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/GenericHID/GenericHID.c index 000000000,000000000..d7f3e3c23 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/GenericHID/GenericHID.c @@@ -1,0 -1,0 +1,202 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 GenericHID demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "GenericHID.h" ++ ++/** Buffer to hold the previously generated HID report, for comparison purposes inside the HID class driver. */ ++static uint8_t PrevHIDReportBuffer[GENERIC_REPORT_SIZE]; ++ ++/** 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 Generic_HID_Interface = ++ { ++ .Config = ++ { ++ .InterfaceNumber = INTERFACE_ID_GenericHID, ++ .ReportINEndpoint = ++ { ++ .Address = GENERIC_IN_EPADDR, ++ .Size = GENERIC_EPSIZE, ++ .Banks = 1, ++ }, ++ .PrevReportINBuffer = PrevHIDReportBuffer, ++ .PrevReportINBufferSize = sizeof(PrevHIDReportBuffer), ++ }, ++ }; ++ ++ ++/** 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); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ HID_Device_USBTask(&Generic_HID_Interface); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#elif (ARCH == ARCH_XMEGA) ++ /* Start the PLL to multiply the 2MHz RC oscillator to 32MHz and switch the CPU core to run from it */ ++ XMEGACLK_StartPLL(CLOCK_SRC_INT_RC2MHZ, 2000000, F_CPU); ++ XMEGACLK_SetCPUClockSource(CLOCK_SRC_PLL); ++ ++ /* Start the 32MHz internal RC oscillator and start the DFLL to increase it to 48MHz using the USB SOF as a reference */ ++ XMEGACLK_StartInternalOscillator(CLOCK_SRC_INT_RC32MHZ); ++ XMEGACLK_StartDFLL(CLOCK_SRC_INT_RC32MHZ, DFLL_REF_INT_USBSOF, F_USB); ++ ++ PMIC.CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm; ++#endif ++ ++ /* Hardware Initialization */ ++ LEDs_Init(); ++ USB_Init(); ++} ++ ++/** 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) ++{ ++ bool ConfigSuccess = true; ++ ++ ConfigSuccess &= HID_Device_ConfigureEndpoints(&Generic_HID_Interface); ++ ++ USB_Device_EnableSOFEvents(); ++ ++ LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); ++} ++ ++/** Event handler for the library USB Control Request reception event. */ ++void EVENT_USB_Device_ControlRequest(void) ++{ ++ HID_Device_ProcessControlRequest(&Generic_HID_Interface); ++} ++ ++/** Event handler for the USB device Start Of Frame event. */ ++void EVENT_USB_Device_StartOfFrame(void) ++{ ++ HID_Device_MillisecondElapsed(&Generic_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[in] ReportType Type of the report to create, either HID_REPORT_ITEM_In or HID_REPORT_ITEM_Feature ++ * \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 \c true to force the sending of the report, \c 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, ++ const uint8_t ReportType, ++ void* ReportData, ++ uint16_t* const ReportSize) ++{ ++ uint8_t* Data = (uint8_t*)ReportData; ++ uint8_t CurrLEDMask = LEDs_GetLEDs(); ++ ++ Data[0] = ((CurrLEDMask & LEDS_LED1) ? 1 : 0); ++ Data[1] = ((CurrLEDMask & LEDS_LED2) ? 1 : 0); ++ Data[2] = ((CurrLEDMask & LEDS_LED3) ? 1 : 0); ++ Data[3] = ((CurrLEDMask & LEDS_LED4) ? 1 : 0); ++ ++ *ReportSize = GENERIC_REPORT_SIZE; ++ return false; ++} ++ ++/** 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] ReportType The type of report that the host has sent, either HID_REPORT_ITEM_Out or HID_REPORT_ITEM_Feature ++ * \param[in] ReportData Pointer to a buffer where the received 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 uint8_t ReportType, ++ const void* ReportData, ++ const uint16_t ReportSize) ++{ ++ uint8_t* Data = (uint8_t*)ReportData; ++ uint8_t NewLEDMask = LEDS_NO_LEDS; ++ ++ if (Data[0]) ++ NewLEDMask |= LEDS_LED1; ++ ++ if (Data[1]) ++ NewLEDMask |= LEDS_LED2; ++ ++ if (Data[2]) ++ NewLEDMask |= LEDS_LED3; ++ ++ if (Data[3]) ++ NewLEDMask |= LEDS_LED4; ++ ++ LEDs_SetAllLEDs(NewLEDMask); ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/GenericHID/GenericHID.h index 000000000,000000000..0528585a6 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/GenericHID/GenericHID.h @@@ -1,0 -1,0 +1,87 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 GenericHID.c. ++ */ ++ ++#ifndef _GENERICHID_H_ ++#define _GENERICHID_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <string.h> ++ ++ #include "Descriptors.h" ++ #include "Config/AppConfig.h" ++ ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Platform/Platform.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 EVENT_USB_Device_Connect(void); ++ void EVENT_USB_Device_Disconnect(void); ++ void EVENT_USB_Device_ConfigurationChanged(void); ++ void EVENT_USB_Device_ControlRequest(void); ++ void EVENT_USB_Device_StartOfFrame(void); ++ ++ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, ++ uint8_t* const ReportID, ++ const uint8_t ReportType, ++ void* ReportData, ++ uint16_t* const ReportSize); ++ void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, ++ const uint8_t ReportID, ++ const uint8_t ReportType, ++ const void* ReportData, ++ const uint16_t ReportSize); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/GenericHID/GenericHID.txt index 000000000,000000000..0d780f49d new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/GenericHID/GenericHID.txt @@@ -1,0 -1,0 +1,79 @@@ ++/** \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 Generic HID Device ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * \li Series 6 USB AVRs (AT90USBxxx6) ++ * \li Series 4 USB AVRs (ATMEGAxxU4) ++ * \li Series 2 USB AVRs (AT90USBxx2, ATMEGAxxU2) ++ * \li Series AU XMEGA AVRs (ATXMEGAxxxAxU) ++ * \li Series B XMEGA AVRs (ATXMEGAxxxBx) ++ * \li Series C XMEGA AVRs (ATXMEGAxxxCx) ++ * ++ * \section Sec_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>Human Interface Device (HID)</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>N/A</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF HID Specification \n ++ * USBIF HID Usage Tables</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Low Speed Mode \n ++ * Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Generic HID device demonstration application. This gives a simple reference application ++ * for implementing a generic HID device, using the basic USB HID drivers in all modern ++ * OSes (i.e. no special drivers required). By default it accepts and sends up to 8 byte reports ++ * to and from a USB Host, and transmits the last sent report back to the host. ++ * ++ * On start-up the system will automatically enumerate and function as a vendor HID device. ++ * When controlled by a custom HID class application, reports can be sent and received by ++ * both the standard data endpoint and control request methods defined in the HID specification. ++ * ++ * \section Sec_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> ++ * <th><b>Define Name:</b></th> ++ * <th><b>Location:</b></th> ++ * <th><b>Description:</b></th> ++ * </tr> ++ * <tr> ++ * <td>GENERIC_REPORT_SIZE</td> ++ * <td>AppConfig.h</td> ++ * <td>This token defines the size of the device reports, both sent and received (including report ID byte). The value ++ * must be an integer ranging from 1 to 255.</td> ++ * </tr> ++ * </table> ++ */ ++ diff --cc lib/lufa/Demos/Device/ClassDriver/GenericHID/HostTestApp/test_generic_hid_libusb.js index 000000000,000000000..363786429 new file mode 100755 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/GenericHID/HostTestApp/test_generic_hid_libusb.js @@@ -1,0 -1,0 +1,143 @@@ ++#!/usr/bin/env node ++ ++// LUFA Library ++// Copyright (C) Dean Camera, 2017. ++// ++// dean [at] fourwalledcubicle [dot] com ++// www.lufa-lib.org ++ ++// LUFA Generic HID device demo host test script. This script will send a ++// continuous stream of generic reports to the device, to show a variable LED ++// pattern on the target board. Send and received report data is printed to ++// the terminal. ++// ++// You have to install the usb and async modules prior to executing this script: ++// apt-get install libusb-1.0-0-dev ++// npm install usb async sprintf ++ ++var usb = require('usb'); ++var async = require('async'); ++var sprintf = require('sprintf'); ++ ++var deviceVid = 0x03EB; ++var devicePid = 0x204F; ++var reportLength = 8; ++ ++function getAndInitHidDeviceAndInterface() ++{ ++ device = usb.findByIds(deviceVid, devicePid); ++ if (!device) { ++ console.log('No device found'); ++ process.exit(1); ++ } ++ device.open(); ++ ++ var hidInterface = device.interface(0); ++ if (hidInterface.isKernelDriverActive()) { ++ hidInterface.detachKernelDriver(); ++ } ++ hidInterface.claim(); ++ ++ async.series([ ++ function(callback) { ++ setConfiguration(0, function(error, data) { ++ callback(); ++ }); ++ } ++ ]); ++ ++ return {hidDevice:device, hidInterface:hidInterface}; ++} ++ ++function read(hidInterface, callback) ++{ ++ endpoint = hidInterface.endpoints[0]; ++ endpoint.transfer(reportLength, function(error, data) { ++ if (error) { ++ console.log(error) ++ } else { ++ console.log("Received LED Pattern:", data.slice(0, 4)); ++ } ++ callback(); ++ }); ++} ++ ++function write(hidDevice, message, callback) ++{ ++ hidDevice.controlTransfer( // Send a Set Report control request ++ parseInt('00100001', 2), // bmRequestType (constant for this control request) ++ 0x09, // bmRequest (constant for this control request) ++ 0x0809, // wValue (MSB is report type, LSB is report number) ++ 0, // wIndex (interface number) ++ message, // message to be sent ++ function(error, data) { // callback to be executed upon finishing the transfer ++ console.log("Sent LED Pattern:", message.slice(1, 5)) ++ callback(); ++ } ++ ); ++} ++ ++function setConfiguration(configurationNumber, callback) ++{ ++ device.controlTransfer( // Send a Set Configuration control request ++ parseInt('00000000', 2), // bmRequestType ++ 0x09, // bmRequest ++ 0, // wValue (Configuration value) ++ 0, // wIndex ++ new Buffer(0), // message to be sent ++ callback // callback to be executed upon finishing the transfer ++ ); ++} ++ ++// @TODO: Fix this function because apparently it doesn't work for some reason. ++function getStringDescriptor(stringId, languageId, callback) ++{ ++ var STRING_DESCRIPTOR_TYPE = 0x03; ++ var wValue = (STRING_DESCRIPTOR_TYPE << 8) | stringId; ++ ++ device.controlTransfer( // Send a Get Descriptor control request ++ parseInt('10000000', 2), // bmRequestType ++ 0x06, // bmRequest ++ wValue, // wValue ++ languageId, // wIndex ++ 64, // response length ++ callback // callback to be executed upon finishing the transfer ++ ); ++} ++ ++function setNextPattern() ++{ ++ var pattern = [ ++ hidInterface.interface, ++ (p >> 3) & 1, ++ (p >> 2) & 1, ++ (p >> 1) & 1, ++ (p >> 0) & 1 ++ ]; ++ ++ async.series([ ++ function(callback) { ++ write(hidDevice, new Buffer(pattern), callback); ++ }, ++ function(callback) { ++ read(hidInterface, callback); ++ }, ++ function(callback) { ++ p = (p + 1) % 16 ++ setTimeout(setNextPattern, 200); ++ callback(); ++ }]); ++} ++ ++var hidDeviceAndInterface = getAndInitHidDeviceAndInterface(); ++var hidDevice = hidDeviceAndInterface.hidDevice ++var hidInterface = hidDeviceAndInterface.hidInterface; ++ ++console.log(sprintf("Connected to device 0x%04X/0x%04X - %s [%s]", ++ hidDevice.deviceDescriptor.idVendor, ++ hidDevice.deviceDescriptor.idProduct, ++ hidDevice.deviceDescriptor.iProduct, ++ hidDevice.deviceDescriptor.iManufacturer)); ++ ++p = 0 ++setNextPattern(); diff --cc lib/lufa/Demos/Device/ClassDriver/GenericHID/HostTestApp/test_generic_hid_libusb.py index 000000000,000000000..4efa4a0ab new file mode 100755 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/GenericHID/HostTestApp/test_generic_hid_libusb.py @@@ -1,0 -1,0 +1,98 @@@ ++#!/usr/bin/env python ++ ++""" ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++""" ++ ++""" ++ LUFA Generic HID device demo host test script. This script will send a ++ continuous stream of generic reports to the device, to show a variable LED ++ pattern on the target board. Send and received report data is printed to ++ the terminal. ++ ++ Requires the PyUSB library (http://sourceforge.net/apps/trac/pyusb/). ++""" ++ ++import sys ++from time import sleep ++import usb.core ++import usb.util ++ ++# Generic HID device VID, PID and report payload length (length is increased ++# by one to account for the Report ID byte that must be pre-pended) ++device_vid = 0x03EB ++device_pid = 0x204F ++ ++def get_and_init_hid_device(): ++ device = usb.core.find(idVendor=device_vid, idProduct=device_pid) ++ ++ if device is None: ++ sys.exit("Could not find USB device.") ++ ++ if device.is_kernel_driver_active(0): ++ try: ++ device.detach_kernel_driver(0) ++ except usb.core.USBError as exception: ++ sys.exit("Could not detatch kernel driver: %s" % str(exception)) ++ ++ try: ++ device.set_configuration() ++ except usb.core.USBError as exception: ++ sys.exit("Could not set configuration: %s" % str(exception)) ++ ++ return device ++ ++def send_led_pattern(device, led1, led2, led3, led4): ++ # Report data for the demo is LED on/off data ++ report_data = [led1, led2, led3, led4] ++ ++ # Send the generated report to the device ++ number_of_bytes_written = device.ctrl_transfer( # Set Report control request ++ 0b00100001, # bmRequestType (constant for this control request) ++ 0x09, # bmRequest (constant for this control request) ++ 0, # wValue (MSB is report type, LSB is report number) ++ 0, # wIndex (interface number) ++ report_data # report data to be sent ++ ); ++ assert number_of_bytes_written == len(report_data) ++ ++ print("Sent LED Pattern: {0}".format(report_data)) ++ ++def receive_led_pattern(hid_device): ++ endpoint = hid_device[0][(0,0)][0] ++ report_data = hid_device.read(endpoint.bEndpointAddress, endpoint.wMaxPacketSize) ++ return list(report_data) ++ ++def main(): ++ hid_device = get_and_init_hid_device() ++ ++ print("Connected to device 0x%04X/0x%04X - %s [%s]" % ++ (hid_device.idVendor, hid_device.idProduct, ++ usb.util.get_string(hid_device, 256, hid_device.iProduct), ++ usb.util.get_string(hid_device, 256, hid_device.iManufacturer))) ++ ++ p = 0 ++ while (True): ++ # Convert the current pattern index to a bit-mask and send ++ send_led_pattern(hid_device, ++ (p >> 3) & 1, ++ (p >> 2) & 1, ++ (p >> 1) & 1, ++ (p >> 0) & 1) ++ ++ # Receive and print the current LED pattern ++ led_pattern = receive_led_pattern(hid_device)[0:4] ++ print("Received LED Pattern: {0}".format(led_pattern)) ++ ++ # Compute next LED pattern in sequence ++ p = (p + 1) % 16 ++ ++ # Delay a bit for visual effect ++ sleep(.2) ++ ++if __name__ == '__main__': ++ main() diff --cc lib/lufa/Demos/Device/ClassDriver/GenericHID/HostTestApp/test_generic_hid_winusb.py index 000000000,000000000..1e5f43019 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/GenericHID/HostTestApp/test_generic_hid_winusb.py @@@ -1,0 -1,0 +1,96 @@@ ++""" ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++""" ++ ++""" ++ LUFA Generic HID device demo host test script. This script will send a ++ continuous stream of generic reports to the device, to show a variable LED ++ pattern on the target board. Send and received report data is printed to ++ the terminal. ++ ++ Requires the pywinusb library (https://pypi.python.org/pypi/pywinusb/). ++""" ++ ++import sys ++from time import sleep ++import pywinusb.hid as hid ++ ++# Generic HID device VID, PID and report payload length (length is increased ++# by one to account for the Report ID byte that must be pre-pended) ++device_vid = 0x03EB ++device_pid = 0x204F ++report_length = 1 + 8 ++ ++ ++def get_hid_device_handle(): ++ hid_device_filter = hid.HidDeviceFilter(vendor_id=device_vid, ++ product_id=device_pid) ++ ++ valid_hid_devices = hid_device_filter.get_devices() ++ ++ if len(valid_hid_devices) is 0: ++ return None ++ else: ++ return valid_hid_devices[0] ++ ++ ++def send_led_pattern(device, led1, led2, led3, led4): ++ # Report data for the demo is the report ID (always zero) followed by the ++ # LED on/off data ++ report_data = [0, led1, led2, led3, led4] ++ ++ # Zero-extend the array to the length the report should be ++ report_data.extend([0] * (report_length - len(report_data))) ++ ++ # Send the generated report to the device ++ device.send_output_report(report_data) ++ ++ print("Sent LED Pattern: {0}".format(report_data[1:5])) ++ ++ ++def received_led_pattern(report_data): ++ print("Received LED Pattern: {0}".format(report_data[1:5])) ++ ++ ++def main(): ++ hid_device = get_hid_device_handle() ++ ++ if hid_device is None: ++ print("No valid HID device found.") ++ sys.exit(1) ++ ++ try: ++ hid_device.open() ++ ++ print("Connected to device 0x%04X/0x%04X - %s [%s]" % ++ (hid_device.vendor_id, hid_device.product_id, ++ hid_device.product_name, hid_device.vendor_name)) ++ ++ # Set up the HID input report handler to receive reports ++ hid_device.set_raw_data_handler(received_led_pattern) ++ ++ p = 0 ++ while (hid_device.is_plugged()): ++ # Convert the current pattern index to a bit-mask and send ++ send_led_pattern(hid_device, ++ (p >> 3) & 1, ++ (p >> 2) & 1, ++ (p >> 1) & 1, ++ (p >> 0) & 1) ++ ++ # Compute next LED pattern in sequence ++ p = (p + 1) % 16 ++ ++ # Delay a bit for visual effect ++ sleep(.2) ++ ++ finally: ++ hid_device.close() ++ ++ ++if __name__ == '__main__': ++ main() diff --cc lib/lufa/Demos/Device/ClassDriver/GenericHID/asf.xml index 000000000,000000000..710f7c719 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/GenericHID/asf.xml @@@ -1,0 -1,0 +1,63 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Generic HID Device Demo (Class Driver APIs)" id="lufa.demos.device.class.generic_hid.example.avr8"> ++ <require idref="lufa.demos.device.class.generic_hid"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <project caption="Generic HID Device Demo (Class Driver APIs)" id="lufa.demos.device.class.generic_hid.example.xmega"> ++ <require idref="lufa.demos.device.class.generic_hid"/> ++ <require idref="lufa.boards.dummy.xmega"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atxmega128a1u"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="32000000UL"/> ++ <build type="define" name="F_USB" value="48000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.device.class.generic_hid" caption="Generic HID Device Demo (Class Driver APIs)"> ++ <info type="description" value="summary"> ++ Generic HID device demo, implementing a device whose LEDs can be controlled via HID messages from the host. This demo uses the user-friendly USB Class Driver APIs to provide a simple, abstracted interface into the USB stack. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Class Driver APIs"/> ++ <keyword value="USB Device"/> ++ <keyword value="HID Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="GenericHID.txt"/> ++ <build type="distribute" subtype="directory" value="HostTestApp"/> ++ ++ <build type="c-source" value="GenericHID.c"/> ++ <build type="c-source" value="Descriptors.c"/> ++ <build type="header-file" value="GenericHID.h"/> ++ <build type="header-file" value="Descriptors.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="module-config" subtype="required-header-file" value="AppConfig.h"/> ++ <build type="header-file" value="Config/AppConfig.h"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Device/ClassDriver/GenericHID/doxyfile index 000000000,000000000..ffc0d0590 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/GenericHID/doxyfile @@@ -1,0 -1,0 +1,2396 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Generic HID 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ \ ++ HostTestApp/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Device/ClassDriver/GenericHID/makefile index 000000000,000000000..62fa2136a new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/GenericHID/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = GenericHID ++SRC = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Device/ClassDriver/Joystick/Config/LUFAConfig.h index 000000000,000000000..299d2ec85 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/Joystick/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,126 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++ #define USB_DEVICE_ONLY ++// #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #elif (ARCH == ARCH_XMEGA) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_RC32MCLKSRC | USB_OPT_BUSEVENT_PRIHIGH) ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++ #define MAX_ENDPOINT_INDEX 1 ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Device/ClassDriver/Joystick/Descriptors.c index 000000000,000000000..4364cafa4 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/Joystick/Descriptors.c @@@ -1,0 -1,0 +1,220 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special ++ * computer-readable structures which the host requests upon device enumeration, to determine ++ * the device's capabilities and functions. ++ */ ++ ++#include "Descriptors.h" ++ ++/** HID class report descriptor. This is a special descriptor constructed with values from the ++ * USBIF HID class specification to describe the reports and capabilities of the HID device. This ++ * descriptor is parsed by the host and its contents used to determine what data (and in what encoding) ++ * the device will send, and what it may be sent back from the host. Refer to the HID specification for ++ * more details on HID report descriptors. ++ */ ++const USB_Descriptor_HIDReport_Datatype_t PROGMEM JoystickReport[] = ++{ ++ /* Use the HID class driver's standard Joystick report. ++ * Min X/Y/Z Axis values: -100 ++ * Max X/Y/Z Axis values: 100 ++ * Min physical X/Y/Z Axis values (used to determine resolution): -1 ++ * Max physical X/Y/Z Axis values (used to determine resolution): 1 ++ * Buttons: 2 ++ */ ++ HID_DESCRIPTOR_JOYSTICK(-100, 100, -1, 1, 2) ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = ++{ ++ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, ++ ++ .USBSpecification = VERSION_BCD(1,1,0), ++ .Class = USB_CSCP_NoDeviceClass, ++ .SubClass = USB_CSCP_NoDeviceSubclass, ++ .Protocol = USB_CSCP_NoDeviceProtocol, ++ ++ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, ++ ++ .VendorID = 0x03EB, ++ .ProductID = 0x2043, ++ .ReleaseNumber = VERSION_BCD(0,0,1), ++ ++ .ManufacturerStrIndex = STRING_ID_Manufacturer, ++ .ProductStrIndex = STRING_ID_Product, ++ .SerialNumStrIndex = NO_DESCRIPTOR, ++ ++ .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. ++ */ ++const 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 = 1, ++ ++ .ConfigurationNumber = 1, ++ .ConfigurationStrIndex = NO_DESCRIPTOR, ++ ++ .ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED), ++ ++ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) ++ }, ++ ++ .HID_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_Joystick, ++ .AlternateSetting = 0x00, ++ ++ .TotalEndpoints = 1, ++ ++ .Class = HID_CSCP_HIDClass, ++ .SubClass = HID_CSCP_NonBootSubclass, ++ .Protocol = HID_CSCP_NonBootProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .HID_JoystickHID = ++ { ++ .Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID}, ++ ++ .HIDSpec = VERSION_BCD(1,1,1), ++ .CountryCode = 0x00, ++ .TotalReportDescriptors = 1, ++ .HIDReportType = HID_DTYPE_Report, ++ .HIDReportLength = sizeof(JoystickReport) ++ }, ++ ++ .HID_ReportINEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = JOYSTICK_EPADDR, ++ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = JOYSTICK_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ } ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_String_t PROGMEM LanguageString = USB_STRING_DESCRIPTOR_ARRAY(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"LUFA Joystick 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 uint16_t wIndex, ++ const void** const DescriptorAddress) ++{ ++ const uint8_t DescriptorType = (wValue >> 8); ++ const uint8_t DescriptorNumber = (wValue & 0xFF); ++ ++ const void* Address = NULL; ++ uint16_t Size = NO_DESCRIPTOR; ++ ++ switch (DescriptorType) ++ { ++ case DTYPE_Device: ++ Address = &DeviceDescriptor; ++ Size = sizeof(USB_Descriptor_Device_t); ++ break; ++ case DTYPE_Configuration: ++ Address = &ConfigurationDescriptor; ++ Size = sizeof(USB_Descriptor_Configuration_t); ++ break; ++ case DTYPE_String: ++ switch (DescriptorNumber) ++ { ++ case STRING_ID_Language: ++ Address = &LanguageString; ++ Size = pgm_read_byte(&LanguageString.Header.Size); ++ break; ++ case STRING_ID_Manufacturer: ++ Address = &ManufacturerString; ++ Size = pgm_read_byte(&ManufacturerString.Header.Size); ++ break; ++ case STRING_ID_Product: ++ Address = &ProductString; ++ Size = pgm_read_byte(&ProductString.Header.Size); ++ break; ++ } ++ ++ break; ++ case HID_DTYPE_HID: ++ Address = &ConfigurationDescriptor.HID_JoystickHID; ++ Size = sizeof(USB_HID_Descriptor_HID_t); ++ break; ++ case HID_DTYPE_Report: ++ Address = &JoystickReport; ++ Size = sizeof(JoystickReport); ++ break; ++ } ++ ++ *DescriptorAddress = Address; ++ return Size; ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/Joystick/Descriptors.h index 000000000,000000000..9de556268 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/Joystick/Descriptors.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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> ++ ++ /* 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; ++ ++ // Joystick HID Interface ++ USB_Descriptor_Interface_t HID_Interface; ++ USB_HID_Descriptor_HID_t HID_JoystickHID; ++ USB_Descriptor_Endpoint_t HID_ReportINEndpoint; ++ } USB_Descriptor_Configuration_t; ++ ++ /** Enum for the device interface descriptor IDs within the device. Each interface descriptor ++ * should have a unique ID index associated with it, which can be used to refer to the ++ * interface from other descriptors. ++ */ ++ enum InterfaceDescriptors_t ++ { ++ INTERFACE_ID_Joystick = 0, /**< Joystick interface desciptor ID */ ++ }; ++ ++ /** Enum for the device string descriptor IDs within the device. Each string descriptor should ++ * have a unique ID index associated with it, which can be used to refer to the string from ++ * other descriptors. ++ */ ++ enum StringDescriptors_t ++ { ++ STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */ ++ STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */ ++ STRING_ID_Product = 2, /**< Product string ID */ ++ }; ++ ++ /* Macros: */ ++ /** Endpoint address of the Joystick HID reporting IN endpoint. */ ++ #define JOYSTICK_EPADDR (ENDPOINT_DIR_IN | 1) ++ ++ /** Size in bytes of the Joystick HID reporting IN endpoint. */ ++ #define JOYSTICK_EPSIZE 8 ++ ++ /* Function Prototypes: */ ++ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ++ const uint16_t wIndex, ++ const void** const DescriptorAddress) ++ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/Joystick/Joystick.c index 000000000,000000000..d1f40ec0d new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/Joystick/Joystick.c @@@ -1,0 -1,0 +1,202 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 Joystick demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "Joystick.h" ++ ++/** Buffer to hold the previously generated HID report, for comparison purposes inside the HID class driver. */ ++static uint8_t PrevJoystickHIDReportBuffer[sizeof(USB_JoystickReport_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 Joystick_HID_Interface = ++ { ++ .Config = ++ { ++ .InterfaceNumber = INTERFACE_ID_Joystick, ++ .ReportINEndpoint = ++ { ++ .Address = JOYSTICK_EPADDR, ++ .Size = JOYSTICK_EPSIZE, ++ .Banks = 1, ++ }, ++ .PrevReportINBuffer = PrevJoystickHIDReportBuffer, ++ .PrevReportINBufferSize = sizeof(PrevJoystickHIDReportBuffer), ++ }, ++ }; ++ ++ ++/** 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); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ HID_Device_USBTask(&Joystick_HID_Interface); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#elif (ARCH == ARCH_XMEGA) ++ /* Start the PLL to multiply the 2MHz RC oscillator to 32MHz and switch the CPU core to run from it */ ++ XMEGACLK_StartPLL(CLOCK_SRC_INT_RC2MHZ, 2000000, F_CPU); ++ XMEGACLK_SetCPUClockSource(CLOCK_SRC_PLL); ++ ++ /* Start the 32MHz internal RC oscillator and start the DFLL to increase it to 48MHz using the USB SOF as a reference */ ++ XMEGACLK_StartInternalOscillator(CLOCK_SRC_INT_RC32MHZ); ++ XMEGACLK_StartDFLL(CLOCK_SRC_INT_RC32MHZ, DFLL_REF_INT_USBSOF, F_USB); ++ ++ PMIC.CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm; ++#endif ++ ++ /* Hardware Initialization */ ++ Joystick_Init(); ++ LEDs_Init(); ++ Buttons_Init(); ++ USB_Init(); ++} ++ ++/** 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) ++{ ++ bool ConfigSuccess = true; ++ ++ ConfigSuccess &= HID_Device_ConfigureEndpoints(&Joystick_HID_Interface); ++ ++ USB_Device_EnableSOFEvents(); ++ ++ LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); ++} ++ ++/** Event handler for the library USB Control Request reception event. */ ++void EVENT_USB_Device_ControlRequest(void) ++{ ++ HID_Device_ProcessControlRequest(&Joystick_HID_Interface); ++} ++ ++/** Event handler for the USB device Start Of Frame event. */ ++void EVENT_USB_Device_StartOfFrame(void) ++{ ++ HID_Device_MillisecondElapsed(&Joystick_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[in] ReportType Type of the report to create, either HID_REPORT_ITEM_In or HID_REPORT_ITEM_Feature ++ * \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 \c true to force the sending of the report, \c 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, ++ const uint8_t ReportType, ++ void* ReportData, ++ uint16_t* const ReportSize) ++{ ++ USB_JoystickReport_Data_t* JoystickReport = (USB_JoystickReport_Data_t*)ReportData; ++ ++ uint8_t JoyStatus_LCL = Joystick_GetStatus(); ++ uint8_t ButtonStatus_LCL = Buttons_GetStatus(); ++ ++ if (JoyStatus_LCL & JOY_UP) ++ JoystickReport->Y = -100; ++ else if (JoyStatus_LCL & JOY_DOWN) ++ JoystickReport->Y = 100; ++ ++ if (JoyStatus_LCL & JOY_LEFT) ++ JoystickReport->X = -100; ++ else if (JoyStatus_LCL & JOY_RIGHT) ++ JoystickReport->X = 100; ++ ++ if (JoyStatus_LCL & JOY_PRESS) ++ JoystickReport->Button |= (1 << 1); ++ ++ if (ButtonStatus_LCL & BUTTONS_BUTTON1) ++ JoystickReport->Button |= (1 << 0); ++ ++ *ReportSize = sizeof(USB_JoystickReport_Data_t); ++ return false; ++} ++ ++/** 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] ReportType The type of report that the host has sent, either HID_REPORT_ITEM_Out or HID_REPORT_ITEM_Feature ++ * \param[in] ReportData Pointer to a buffer where the received 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 uint8_t ReportType, ++ 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 ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/Joystick/Joystick.h index 000000000,000000000..e6e61bc1b new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/Joystick/Joystick.h @@@ -1,0 -1,0 +1,100 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 Joystick.c. ++ */ ++ ++#ifndef _JOYSTICK_H_ ++#define _JOYSTICK_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <string.h> ++ ++ #include "Descriptors.h" ++ ++ #include <LUFA/Drivers/Board/Joystick.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/Board/Buttons.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Platform/Platform.h> ++ ++ /* Type Defines: */ ++ /** Type define for the joystick HID report structure, for creating and sending HID reports to the host PC. ++ * This mirrors the layout described to the host in the HID report descriptor, in Descriptors.c. ++ */ ++ typedef struct ++ { ++ int8_t X; /**< Current absolute joystick X position, as a signed 8-bit integer */ ++ int8_t Y; /**< Current absolute joystick Y position, as a signed 8-bit integer */ ++ int8_t Z; /**< Current absolute joystick Z position, as a signed 8-bit integer */ ++ uint8_t Button; /**< Bit mask of the currently pressed joystick buttons */ ++ } USB_JoystickReport_Data_t; ++ ++ /* 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 EVENT_USB_Device_Connect(void); ++ void EVENT_USB_Device_Disconnect(void); ++ void EVENT_USB_Device_ConfigurationChanged(void); ++ void EVENT_USB_Device_ControlRequest(void); ++ void EVENT_USB_Device_StartOfFrame(void); ++ ++ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, ++ uint8_t* const ReportID, ++ const uint8_t ReportType, ++ void* ReportData, ++ uint16_t* const ReportSize); ++ void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, ++ const uint8_t ReportID, ++ const uint8_t ReportType, ++ const void* ReportData, ++ const uint16_t ReportSize); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/Joystick/Joystick.txt index 000000000,000000000..b174642f4 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/Joystick/Joystick.txt @@@ -1,0 -1,0 +1,77 @@@ ++/** \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 Joystick Device Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * \li Series 6 USB AVRs (AT90USBxxx6) ++ * \li Series 4 USB AVRs (ATMEGAxxU4) ++ * \li Series 2 USB AVRs (AT90USBxx2, ATMEGAxxU2) ++ * \li Series AU XMEGA AVRs (ATXMEGAxxxAxU) ++ * \li Series B XMEGA AVRs (ATXMEGAxxxBx) ++ * \li Series C XMEGA AVRs (ATXMEGAxxxCx) ++ * ++ * \section Sec_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>Human Interface Device (HID)</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>N/A</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF HID Specification \n ++ * USBIF HID Usage Tables</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Low Speed Mode \n ++ * Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Joystick demonstration application. This gives a simple reference ++ * application for implementing a USB Keyboard device, for USB Joysticks ++ * using the standard Keyboard HID profile. ++ * ++ * This device will show up as a generic joystick device, with two buttons. ++ * Pressing the joystick inwards is the first button, and the HWB button ++ * is the second. ++ * ++ * Moving the joystick on the selected board moves the joystick location on ++ * the host computer. ++ * ++ * Currently only single interface joysticks are supported. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Device/ClassDriver/Joystick/asf.xml index 000000000,000000000..97d37a5aa new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/Joystick/asf.xml @@@ -1,0 -1,0 +1,62 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Joystick HID Device Demo (Class Driver APIs)" id="lufa.demos.device.class.joystick.example.avr8"> ++ <require idref="lufa.demos.device.class.joystick"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <project caption="Joystick HID Device Demo (Class Driver APIs)" id="lufa.demos.device.class.joystick.example.xmega"> ++ <require idref="lufa.demos.device.class.joystick"/> ++ <require idref="lufa.boards.dummy.xmega"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atxmega128a1u"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="32000000UL"/> ++ <build type="define" name="F_USB" value="48000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.device.class.joystick" caption="Joystick HID Device Demo (Class Driver APIs)"> ++ <info type="description" value="summary"> ++ Joystick HID device demo, implementing a basic USB joystick that can send movement information to the host. This demo uses the user-friendly USB Class Driver APIs to provide a simple, abstracted interface into the USB stack. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Class Driver APIs"/> ++ <keyword value="USB Device"/> ++ <keyword value="HID Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="Joystick.txt"/> ++ ++ <build type="c-source" value="Joystick.c"/> ++ <build type="c-source" value="Descriptors.c"/> ++ <build type="header-file" value="Joystick.h"/> ++ <build type="header-file" value="Descriptors.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ <require idref="lufa.drivers.board.buttons"/> ++ <require idref="lufa.drivers.board.joystick"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Device/ClassDriver/Joystick/doxyfile index 000000000,000000000..45ebd1341 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/Joystick/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Joystick 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Device/ClassDriver/Joystick/makefile index 000000000,000000000..b6f6e2e2a new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/Joystick/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = Joystick ++SRC = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Device/ClassDriver/Keyboard/Config/LUFAConfig.h index 000000000,000000000..299d2ec85 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/Keyboard/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,126 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++ #define USB_DEVICE_ONLY ++// #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #elif (ARCH == ARCH_XMEGA) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_RC32MCLKSRC | USB_OPT_BUSEVENT_PRIHIGH) ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++ #define MAX_ENDPOINT_INDEX 1 ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Device/ClassDriver/Keyboard/Descriptors.c index 000000000,000000000..4a1e1297b new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/Keyboard/Descriptors.c @@@ -1,0 -1,0 +1,216 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special ++ * computer-readable structures which the host requests upon device enumeration, to determine ++ * the device's capabilities and functions. ++ */ ++ ++#include "Descriptors.h" ++ ++/** HID class report descriptor. This is a special descriptor constructed with values from the ++ * USBIF HID class specification to describe the reports and capabilities of the HID device. This ++ * descriptor is parsed by the host and its contents used to determine what data (and in what encoding) ++ * the device will send, and what it may be sent back from the host. Refer to the HID specification for ++ * more details on HID report descriptors. ++ */ ++const USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] = ++{ ++ /* Use the HID class driver's standard Keyboard report. ++ * Max simultaneous keys: 6 ++ */ ++ HID_DESCRIPTOR_KEYBOARD(6) ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = ++{ ++ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, ++ ++ .USBSpecification = VERSION_BCD(1,1,0), ++ .Class = USB_CSCP_NoDeviceClass, ++ .SubClass = USB_CSCP_NoDeviceSubclass, ++ .Protocol = USB_CSCP_NoDeviceProtocol, ++ ++ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, ++ ++ .VendorID = 0x03EB, ++ .ProductID = 0x2042, ++ .ReleaseNumber = VERSION_BCD(0,0,1), ++ ++ .ManufacturerStrIndex = STRING_ID_Manufacturer, ++ .ProductStrIndex = STRING_ID_Product, ++ .SerialNumStrIndex = NO_DESCRIPTOR, ++ ++ .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. ++ */ ++const 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 = 1, ++ ++ .ConfigurationNumber = 1, ++ .ConfigurationStrIndex = NO_DESCRIPTOR, ++ ++ .ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED), ++ ++ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) ++ }, ++ ++ .HID_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_Keyboard, ++ .AlternateSetting = 0x00, ++ ++ .TotalEndpoints = 1, ++ ++ .Class = HID_CSCP_HIDClass, ++ .SubClass = HID_CSCP_BootSubclass, ++ .Protocol = HID_CSCP_KeyboardBootProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .HID_KeyboardHID = ++ { ++ .Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID}, ++ ++ .HIDSpec = VERSION_BCD(1,1,1), ++ .CountryCode = 0x00, ++ .TotalReportDescriptors = 1, ++ .HIDReportType = HID_DTYPE_Report, ++ .HIDReportLength = sizeof(KeyboardReport) ++ }, ++ ++ .HID_ReportINEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = KEYBOARD_EPADDR, ++ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = KEYBOARD_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_String_t PROGMEM LanguageString = USB_STRING_DESCRIPTOR_ARRAY(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"LUFA Keyboard 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 uint16_t wIndex, ++ const void** const DescriptorAddress) ++{ ++ const uint8_t DescriptorType = (wValue >> 8); ++ const uint8_t DescriptorNumber = (wValue & 0xFF); ++ ++ const void* Address = NULL; ++ uint16_t Size = NO_DESCRIPTOR; ++ ++ switch (DescriptorType) ++ { ++ case DTYPE_Device: ++ Address = &DeviceDescriptor; ++ Size = sizeof(USB_Descriptor_Device_t); ++ break; ++ case DTYPE_Configuration: ++ Address = &ConfigurationDescriptor; ++ Size = sizeof(USB_Descriptor_Configuration_t); ++ break; ++ case DTYPE_String: ++ switch (DescriptorNumber) ++ { ++ case STRING_ID_Language: ++ Address = &LanguageString; ++ Size = pgm_read_byte(&LanguageString.Header.Size); ++ break; ++ case STRING_ID_Manufacturer: ++ Address = &ManufacturerString; ++ Size = pgm_read_byte(&ManufacturerString.Header.Size); ++ break; ++ case STRING_ID_Product: ++ Address = &ProductString; ++ Size = pgm_read_byte(&ProductString.Header.Size); ++ break; ++ } ++ ++ break; ++ case HID_DTYPE_HID: ++ Address = &ConfigurationDescriptor.HID_KeyboardHID; ++ Size = sizeof(USB_HID_Descriptor_HID_t); ++ break; ++ case HID_DTYPE_Report: ++ Address = &KeyboardReport; ++ Size = sizeof(KeyboardReport); ++ break; ++ } ++ ++ *DescriptorAddress = Address; ++ return Size; ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/Keyboard/Descriptors.h index 000000000,000000000..3e6a021da new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/Keyboard/Descriptors.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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> ++ ++ /* 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; ++ ++ // Keyboard HID Interface ++ USB_Descriptor_Interface_t HID_Interface; ++ USB_HID_Descriptor_HID_t HID_KeyboardHID; ++ USB_Descriptor_Endpoint_t HID_ReportINEndpoint; ++ } USB_Descriptor_Configuration_t; ++ ++ /** Enum for the device interface descriptor IDs within the device. Each interface descriptor ++ * should have a unique ID index associated with it, which can be used to refer to the ++ * interface from other descriptors. ++ */ ++ enum InterfaceDescriptors_t ++ { ++ INTERFACE_ID_Keyboard = 0, /**< Keyboard interface descriptor ID */ ++ }; ++ ++ /** Enum for the device string descriptor IDs within the device. Each string descriptor should ++ * have a unique ID index associated with it, which can be used to refer to the string from ++ * other descriptors. ++ */ ++ enum StringDescriptors_t ++ { ++ STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */ ++ STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */ ++ STRING_ID_Product = 2, /**< Product string ID */ ++ }; ++ ++ /* Macros: */ ++ /** Endpoint address of the Keyboard HID reporting IN endpoint. */ ++ #define KEYBOARD_EPADDR (ENDPOINT_DIR_IN | 1) ++ ++ /** Size in bytes of the Keyboard HID reporting IN endpoint. */ ++ #define KEYBOARD_EPSIZE 8 ++ ++ /* Function Prototypes: */ ++ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ++ const uint16_t wIndex, ++ const void** const DescriptorAddress) ++ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/Keyboard/Keyboard.c index 000000000,000000000..99799f6d5 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/Keyboard/Keyboard.c @@@ -1,0 -1,0 +1,219 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 Keyboard demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "Keyboard.h" ++ ++/** Buffer to hold the previously generated Keyboard HID report, for comparison purposes inside the HID class driver. */ ++static uint8_t PrevKeyboardHIDReportBuffer[sizeof(USB_KeyboardReport_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 Keyboard_HID_Interface = ++ { ++ .Config = ++ { ++ .InterfaceNumber = INTERFACE_ID_Keyboard, ++ .ReportINEndpoint = ++ { ++ .Address = KEYBOARD_EPADDR, ++ .Size = KEYBOARD_EPSIZE, ++ .Banks = 1, ++ }, ++ .PrevReportINBuffer = PrevKeyboardHIDReportBuffer, ++ .PrevReportINBufferSize = sizeof(PrevKeyboardHIDReportBuffer), ++ }, ++ }; ++ ++ ++/** 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); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ HID_Device_USBTask(&Keyboard_HID_Interface); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware() ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#elif (ARCH == ARCH_XMEGA) ++ /* Start the PLL to multiply the 2MHz RC oscillator to 32MHz and switch the CPU core to run from it */ ++ XMEGACLK_StartPLL(CLOCK_SRC_INT_RC2MHZ, 2000000, F_CPU); ++ XMEGACLK_SetCPUClockSource(CLOCK_SRC_PLL); ++ ++ /* Start the 32MHz internal RC oscillator and start the DFLL to increase it to 48MHz using the USB SOF as a reference */ ++ XMEGACLK_StartInternalOscillator(CLOCK_SRC_INT_RC32MHZ); ++ XMEGACLK_StartDFLL(CLOCK_SRC_INT_RC32MHZ, DFLL_REF_INT_USBSOF, F_USB); ++ ++ PMIC.CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm; ++#endif ++ ++ /* Hardware Initialization */ ++ Joystick_Init(); ++ LEDs_Init(); ++ Buttons_Init(); ++ USB_Init(); ++} ++ ++/** 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) ++{ ++ bool ConfigSuccess = true; ++ ++ ConfigSuccess &= HID_Device_ConfigureEndpoints(&Keyboard_HID_Interface); ++ ++ USB_Device_EnableSOFEvents(); ++ ++ LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); ++} ++ ++/** Event handler for the library USB Control Request reception event. */ ++void EVENT_USB_Device_ControlRequest(void) ++{ ++ HID_Device_ProcessControlRequest(&Keyboard_HID_Interface); ++} ++ ++/** Event handler for the USB device Start Of Frame event. */ ++void EVENT_USB_Device_StartOfFrame(void) ++{ ++ HID_Device_MillisecondElapsed(&Keyboard_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[in] ReportType Type of the report to create, either HID_REPORT_ITEM_In or HID_REPORT_ITEM_Feature ++ * \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 \c true to force the sending of the report, \c 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, ++ const uint8_t ReportType, ++ void* ReportData, ++ uint16_t* const ReportSize) ++{ ++ USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData; ++ ++ uint8_t JoyStatus_LCL = Joystick_GetStatus(); ++ uint8_t ButtonStatus_LCL = Buttons_GetStatus(); ++ ++ uint8_t UsedKeyCodes = 0; ++ ++ if (JoyStatus_LCL & JOY_UP) ++ KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_A; ++ else if (JoyStatus_LCL & JOY_DOWN) ++ KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_B; ++ ++ if (JoyStatus_LCL & JOY_LEFT) ++ KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_C; ++ else if (JoyStatus_LCL & JOY_RIGHT) ++ KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_D; ++ ++ if (JoyStatus_LCL & JOY_PRESS) ++ KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_E; ++ ++ if (ButtonStatus_LCL & BUTTONS_BUTTON1) ++ KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_F; ++ ++ if (UsedKeyCodes) ++ KeyboardReport->Modifier = HID_KEYBOARD_MODIFIER_LEFTSHIFT; ++ ++ *ReportSize = sizeof(USB_KeyboardReport_Data_t); ++ return false; ++} ++ ++/** 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] ReportType The type of report that the host has sent, either HID_REPORT_ITEM_Out or HID_REPORT_ITEM_Feature ++ * \param[in] ReportData Pointer to a buffer where the received 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 uint8_t ReportType, ++ const void* ReportData, ++ const uint16_t ReportSize) ++{ ++ uint8_t LEDMask = LEDS_NO_LEDS; ++ uint8_t* LEDReport = (uint8_t*)ReportData; ++ ++ if (*LEDReport & HID_KEYBOARD_LED_NUMLOCK) ++ LEDMask |= LEDS_LED1; ++ ++ if (*LEDReport & HID_KEYBOARD_LED_CAPSLOCK) ++ LEDMask |= LEDS_LED3; ++ ++ if (*LEDReport & HID_KEYBOARD_LED_SCROLLLOCK) ++ LEDMask |= LEDS_LED4; ++ ++ LEDs_SetAllLEDs(LEDMask); ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/Keyboard/Keyboard.h index 000000000,000000000..45d742330 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/Keyboard/Keyboard.h @@@ -1,0 -1,0 +1,89 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 Keyboard.c. ++ */ ++ ++#ifndef _KEYBOARD_H_ ++#define _KEYBOARD_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <stdbool.h> ++ #include <string.h> ++ ++ #include "Descriptors.h" ++ ++ #include <LUFA/Drivers/Board/Joystick.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/Board/Buttons.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Platform/Platform.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 EVENT_USB_Device_Connect(void); ++ void EVENT_USB_Device_Disconnect(void); ++ void EVENT_USB_Device_ConfigurationChanged(void); ++ void EVENT_USB_Device_ControlRequest(void); ++ void EVENT_USB_Device_StartOfFrame(void); ++ ++ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, ++ uint8_t* const ReportID, ++ const uint8_t ReportType, ++ void* ReportData, ++ uint16_t* const ReportSize); ++ void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, ++ const uint8_t ReportID, ++ const uint8_t ReportType, ++ const void* ReportData, ++ const uint16_t ReportSize); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/Keyboard/Keyboard.txt index 000000000,000000000..3813745c8 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/Keyboard/Keyboard.txt @@@ -1,0 -1,0 +1,76 @@@ ++/** \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 Keyboard Device Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * \li Series 6 USB AVRs (AT90USBxxx6) ++ * \li Series 4 USB AVRs (ATMEGAxxU4) ++ * \li Series 2 USB AVRs (AT90USBxx2, ATMEGAxxU2) ++ * \li Series AU XMEGA AVRs (ATXMEGAxxxAxU) ++ * \li Series B XMEGA AVRs (ATXMEGAxxxBx) ++ * \li Series C XMEGA AVRs (ATXMEGAxxxCx) ++ * ++ * \section Sec_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>Human Interface Device (HID)</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>Keyboard Subclass</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF HID Specification \n ++ * USBIF HID Usage Tables</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Low Speed Mode \n ++ * Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Keyboard demonstration application. This gives a simple reference application ++ * for implementing a USB Keyboard using the basic USB HID drivers in all modern ++ * OSes (i.e. no special drivers required). It is boot protocol compatible, and thus ++ * works under compatible BIOS as if it was a native keyboard (e.g. PS/2). ++ * ++ * On start-up the system will automatically enumerate and function as a keyboard ++ * when the USB connection to a host is present. To use the keyboard example, ++ * manipulate the joystick to send the letters a, b, c, d and e. See the USB HID ++ * documentation for more information on sending keyboard event and key presses. Unlike ++ * other LUFA Keyboard demos, this example shows explicitly how to send multiple key presses ++ * inside the same report to the host. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Device/ClassDriver/Keyboard/asf.xml index 000000000,000000000..d7cdc17bc new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/Keyboard/asf.xml @@@ -1,0 -1,0 +1,62 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Keyboard HID Device Demo (Class Driver APIs)" id="lufa.demos.device.class.keyboard.example.avr8"> ++ <require idref="lufa.demos.device.class.keyboard"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <project caption="Keyboard HID Device Demo (Class Driver APIs)" id="lufa.demos.device.class.keyboard.example.xmega"> ++ <require idref="lufa.demos.device.class.keyboard"/> ++ <require idref="lufa.boards.dummy.xmega"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atxmega128a1u"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="32000000UL"/> ++ <build type="define" name="F_USB" value="48000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.device.class.keyboard" caption="Keyboard HID Device Demo (Class Driver APIs)"> ++ <info type="description" value="summary"> ++ Keyboard HID device demo, implementing a basic USB keyboard that can send key press information to the host. This demo uses the user-friendly USB Class Driver APIs to provide a simple, abstracted interface into the USB stack. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Class Driver APIs"/> ++ <keyword value="USB Device"/> ++ <keyword value="HID Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="Keyboard.txt"/> ++ ++ <build type="c-source" value="Keyboard.c"/> ++ <build type="c-source" value="Descriptors.c"/> ++ <build type="header-file" value="Keyboard.h"/> ++ <build type="header-file" value="Descriptors.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ <require idref="lufa.drivers.board.joystick"/> ++ <require idref="lufa.drivers.board.buttons"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Device/ClassDriver/Keyboard/doxyfile index 000000000,000000000..e39731937 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/Keyboard/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Keyboard 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Device/ClassDriver/Keyboard/makefile index 000000000,000000000..a02c41c64 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/Keyboard/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = Keyboard ++SRC = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Device/ClassDriver/KeyboardMouse/Config/LUFAConfig.h index 000000000,000000000..cc828a108 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/KeyboardMouse/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,126 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++ #define USB_DEVICE_ONLY ++// #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #elif (ARCH == ARCH_XMEGA) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_RC32MCLKSRC | USB_OPT_BUSEVENT_PRIHIGH) ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++ #define MAX_ENDPOINT_INDEX 3 ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Device/ClassDriver/KeyboardMouse/Descriptors.c index 000000000,000000000..7a810ca5e new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/KeyboardMouse/Descriptors.c @@@ -1,0 -1,0 +1,289 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special ++ * computer-readable structures which the host requests upon device enumeration, to determine ++ * the device's capabilities and functions. ++ */ ++ ++#include "Descriptors.h" ++ ++/** HID class report descriptor. This is a special descriptor constructed with values from the ++ * USBIF HID class specification to describe the reports and capabilities of the HID device. This ++ * descriptor is parsed by the host and its contents used to determine what data (and in what encoding) ++ * the device will send, and what it may be sent back from the host. Refer to the HID specification for ++ * more details on HID report descriptors. ++ * ++ * This descriptor describes the mouse HID interface's report structure. ++ */ ++const USB_Descriptor_HIDReport_Datatype_t PROGMEM MouseReport[] = ++{ ++ /* Use the HID class driver's standard Mouse report. ++ * Min X/Y Axis values: -1 ++ * Max X/Y Axis values: 1 ++ * Min physical X/Y Axis values (used to determine resolution): -1 ++ * Max physical X/Y Axis values (used to determine resolution): 1 ++ * Buttons: 3 ++ * Absolute screen coordinates: false ++ */ ++ HID_DESCRIPTOR_MOUSE(-1, 1, -1, 1, 3, false) ++}; ++ ++/** Same as the MouseReport structure, but defines the keyboard HID interface's report structure. */ ++const USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] = ++{ ++ /* Use the HID class driver's standard Keyboard report. ++ * Max simultaneous keys: 6 ++ */ ++ HID_DESCRIPTOR_KEYBOARD(6) ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = ++{ ++ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, ++ ++ .USBSpecification = VERSION_BCD(1,1,0), ++ .Class = USB_CSCP_NoDeviceClass, ++ .SubClass = USB_CSCP_NoDeviceSubclass, ++ .Protocol = USB_CSCP_NoDeviceProtocol, ++ ++ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, ++ ++ .VendorID = 0x03EB, ++ .ProductID = 0x204D, ++ .ReleaseNumber = VERSION_BCD(0,0,1), ++ ++ .ManufacturerStrIndex = STRING_ID_Manufacturer, ++ .ProductStrIndex = STRING_ID_Product, ++ .SerialNumStrIndex = NO_DESCRIPTOR, ++ ++ .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. ++ */ ++const 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 = 2, ++ ++ .ConfigurationNumber = 1, ++ .ConfigurationStrIndex = NO_DESCRIPTOR, ++ ++ .ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED), ++ ++ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) ++ }, ++ ++ .HID1_KeyboardInterface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_Keyboard, ++ .AlternateSetting = 0x00, ++ ++ .TotalEndpoints = 1, ++ ++ .Class = HID_CSCP_HIDClass, ++ .SubClass = HID_CSCP_BootSubclass, ++ .Protocol = HID_CSCP_KeyboardBootProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .HID1_KeyboardHID = ++ { ++ .Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID}, ++ ++ .HIDSpec = VERSION_BCD(1,1,1), ++ .CountryCode = 0x00, ++ .TotalReportDescriptors = 1, ++ .HIDReportType = HID_DTYPE_Report, ++ .HIDReportLength = sizeof(KeyboardReport) ++ }, ++ ++ .HID1_ReportINEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = KEYBOARD_IN_EPADDR, ++ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = HID_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++ ++ .HID2_MouseInterface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_Mouse, ++ .AlternateSetting = 0x00, ++ ++ .TotalEndpoints = 1, ++ ++ .Class = HID_CSCP_HIDClass, ++ .SubClass = HID_CSCP_BootSubclass, ++ .Protocol = HID_CSCP_MouseBootProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .HID2_MouseHID = ++ { ++ .Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID}, ++ ++ .HIDSpec = VERSION_BCD(1,1,1), ++ .CountryCode = 0x00, ++ .TotalReportDescriptors = 1, ++ .HIDReportType = HID_DTYPE_Report, ++ .HIDReportLength = sizeof(MouseReport) ++ }, ++ ++ .HID2_ReportINEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = MOUSE_IN_EPADDR, ++ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = HID_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ } ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_String_t PROGMEM LanguageString = USB_STRING_DESCRIPTOR_ARRAY(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"LUFA Mouse and Keyboard 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 uint16_t wIndex, ++ const void** const DescriptorAddress) ++{ ++ const uint8_t DescriptorType = (wValue >> 8); ++ const uint8_t DescriptorNumber = (wValue & 0xFF); ++ ++ const void* Address = NULL; ++ uint16_t Size = NO_DESCRIPTOR; ++ ++ switch (DescriptorType) ++ { ++ case DTYPE_Device: ++ Address = &DeviceDescriptor; ++ Size = sizeof(USB_Descriptor_Device_t); ++ break; ++ case DTYPE_Configuration: ++ Address = &ConfigurationDescriptor; ++ Size = sizeof(USB_Descriptor_Configuration_t); ++ break; ++ case DTYPE_String: ++ switch (DescriptorNumber) ++ { ++ case STRING_ID_Language: ++ Address = &LanguageString; ++ Size = pgm_read_byte(&LanguageString.Header.Size); ++ break; ++ case STRING_ID_Manufacturer: ++ Address = &ManufacturerString; ++ Size = pgm_read_byte(&ManufacturerString.Header.Size); ++ break; ++ case STRING_ID_Product: ++ Address = &ProductString; ++ Size = pgm_read_byte(&ProductString.Header.Size); ++ break; ++ } ++ ++ break; ++ case HID_DTYPE_HID: ++ switch (wIndex) ++ { ++ case INTERFACE_ID_Keyboard: ++ Address = &ConfigurationDescriptor.HID1_KeyboardHID; ++ Size = sizeof(USB_HID_Descriptor_HID_t); ++ break; ++ case INTERFACE_ID_Mouse: ++ Address = &ConfigurationDescriptor.HID2_MouseHID; ++ Size = sizeof(USB_HID_Descriptor_HID_t); ++ break; ++ } ++ ++ break; ++ case HID_DTYPE_Report: ++ switch (wIndex) ++ { ++ case INTERFACE_ID_Keyboard: ++ Address = &KeyboardReport; ++ Size = sizeof(KeyboardReport); ++ break; ++ case INTERFACE_ID_Mouse: ++ Address = &MouseReport; ++ Size = sizeof(MouseReport); ++ break; ++ } ++ ++ break; ++ } ++ ++ *DescriptorAddress = Address; ++ return Size; ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/KeyboardMouse/Descriptors.h index 000000000,000000000..1baaa3c02 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/KeyboardMouse/Descriptors.h @@@ -1,0 -1,0 +1,102 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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> ++ ++ /* 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; ++ ++ // Keyboard HID Interface ++ USB_Descriptor_Interface_t HID1_KeyboardInterface; ++ USB_HID_Descriptor_HID_t HID1_KeyboardHID; ++ USB_Descriptor_Endpoint_t HID1_ReportINEndpoint; ++ ++ // Mouse HID Interface ++ USB_Descriptor_Interface_t HID2_MouseInterface; ++ USB_HID_Descriptor_HID_t HID2_MouseHID; ++ USB_Descriptor_Endpoint_t HID2_ReportINEndpoint; ++ } USB_Descriptor_Configuration_t; ++ ++ /** Enum for the device interface descriptor IDs within the device. Each interface descriptor ++ * should have a unique ID index associated with it, which can be used to refer to the ++ * interface from other descriptors. ++ */ ++ enum InterfaceDescriptors_t ++ { ++ INTERFACE_ID_Keyboard = 0, /**< Keyboard interface descriptor ID */ ++ INTERFACE_ID_Mouse = 1, /**< Mouse interface descriptor ID */ ++ }; ++ ++ /** Enum for the device string descriptor IDs within the device. Each string descriptor should ++ * have a unique ID index associated with it, which can be used to refer to the string from ++ * other descriptors. ++ */ ++ enum StringDescriptors_t ++ { ++ STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */ ++ STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */ ++ STRING_ID_Product = 2, /**< Product string ID */ ++ }; ++ ++ /* Macros: */ ++ /** Endpoint address of the Keyboard HID reporting IN endpoint. */ ++ #define KEYBOARD_IN_EPADDR (ENDPOINT_DIR_IN | 1) ++ ++ /** Endpoint address of the Mouse HID reporting IN endpoint. */ ++ #define MOUSE_IN_EPADDR (ENDPOINT_DIR_IN | 3) ++ ++ /** Size in bytes of each of the HID reporting IN endpoints. */ ++ #define HID_EPSIZE 8 ++ ++ /* Function Prototypes: */ ++ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ++ const uint16_t wIndex, ++ const void** const DescriptorAddress) ++ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.c index 000000000,000000000..4405fe745 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.c @@@ -1,0 -1,0 +1,276 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 KeyboardMouse demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "KeyboardMouse.h" ++ ++/** Buffer to hold the previously generated Keyboard HID report, for comparison purposes inside the HID class driver. */ ++static uint8_t PrevKeyboardHIDReportBuffer[sizeof(USB_KeyboardReport_Data_t)]; ++ ++/** Buffer to hold the previously generated Mouse HID report, for comparison purposes inside the HID class driver. */ ++static 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. This is for the keyboard HID ++ * interface within the device. ++ */ ++USB_ClassInfo_HID_Device_t Keyboard_HID_Interface = ++ { ++ .Config = ++ { ++ .InterfaceNumber = INTERFACE_ID_Keyboard, ++ .ReportINEndpoint = ++ { ++ .Address = KEYBOARD_IN_EPADDR, ++ .Size = HID_EPSIZE, ++ .Banks = 1, ++ }, ++ .PrevReportINBuffer = PrevKeyboardHIDReportBuffer, ++ .PrevReportINBufferSize = sizeof(PrevKeyboardHIDReportBuffer), ++ }, ++ }; ++ ++/** 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. This is for the mouse HID ++ * interface within the device. ++ */ ++USB_ClassInfo_HID_Device_t Mouse_HID_Interface = ++ { ++ .Config = ++ { ++ .InterfaceNumber = INTERFACE_ID_Mouse, ++ .ReportINEndpoint = ++ { ++ .Address = MOUSE_IN_EPADDR, ++ .Size = HID_EPSIZE, ++ .Banks = 1, ++ }, ++ .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); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ HID_Device_USBTask(&Keyboard_HID_Interface); ++ HID_Device_USBTask(&Mouse_HID_Interface); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware() ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#elif (ARCH == ARCH_XMEGA) ++ /* Start the PLL to multiply the 2MHz RC oscillator to 32MHz and switch the CPU core to run from it */ ++ XMEGACLK_StartPLL(CLOCK_SRC_INT_RC2MHZ, 2000000, F_CPU); ++ XMEGACLK_SetCPUClockSource(CLOCK_SRC_PLL); ++ ++ /* Start the 32MHz internal RC oscillator and start the DFLL to increase it to 48MHz using the USB SOF as a reference */ ++ XMEGACLK_StartInternalOscillator(CLOCK_SRC_INT_RC32MHZ); ++ XMEGACLK_StartDFLL(CLOCK_SRC_INT_RC32MHZ, DFLL_REF_INT_USBSOF, F_USB); ++ ++ PMIC.CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm; ++#endif ++ ++ /* Hardware Initialization */ ++ Joystick_Init(); ++ LEDs_Init(); ++ USB_Init(); ++} ++ ++/** 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) ++{ ++ bool ConfigSuccess = true; ++ ++ ConfigSuccess &= HID_Device_ConfigureEndpoints(&Keyboard_HID_Interface); ++ ConfigSuccess &= HID_Device_ConfigureEndpoints(&Mouse_HID_Interface); ++ ++ USB_Device_EnableSOFEvents(); ++ ++ LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); ++} ++ ++/** Event handler for the library USB Control Request reception event. */ ++void EVENT_USB_Device_ControlRequest(void) ++{ ++ HID_Device_ProcessControlRequest(&Keyboard_HID_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(&Keyboard_HID_Interface); ++ 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[in] ReportType Type of the report to create, either HID_REPORT_ITEM_In or HID_REPORT_ITEM_Feature ++ * \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 \c true to force the sending of the report, \c 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, ++ const uint8_t ReportType, ++ void* ReportData, ++ uint16_t* const ReportSize) ++{ ++ uint8_t JoyStatus_LCL = Joystick_GetStatus(); ++ uint8_t ButtonStatus_LCL = Buttons_GetStatus(); ++ ++ /* Determine which interface must have its report generated */ ++ if (HIDInterfaceInfo == &Keyboard_HID_Interface) ++ { ++ USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData; ++ ++ /* If first board button not being held down, no keyboard report */ ++ if (!(ButtonStatus_LCL & BUTTONS_BUTTON1)) ++ return 0; ++ ++ KeyboardReport->Modifier = HID_KEYBOARD_MODIFIER_LEFTSHIFT; ++ ++ if (JoyStatus_LCL & JOY_UP) ++ KeyboardReport->KeyCode[0] = HID_KEYBOARD_SC_A; ++ else if (JoyStatus_LCL & JOY_DOWN) ++ KeyboardReport->KeyCode[0] = HID_KEYBOARD_SC_B; ++ ++ if (JoyStatus_LCL & JOY_LEFT) ++ KeyboardReport->KeyCode[0] = HID_KEYBOARD_SC_C; ++ else if (JoyStatus_LCL & JOY_RIGHT) ++ KeyboardReport->KeyCode[0] = HID_KEYBOARD_SC_D; ++ ++ if (JoyStatus_LCL & JOY_PRESS) ++ KeyboardReport->KeyCode[0] = HID_KEYBOARD_SC_E; ++ ++ *ReportSize = sizeof(USB_KeyboardReport_Data_t); ++ return false; ++ } ++ else ++ { ++ USB_MouseReport_Data_t* MouseReport = (USB_MouseReport_Data_t*)ReportData; ++ ++ /* If first board button being held down, no mouse report */ ++ if (ButtonStatus_LCL & BUTTONS_BUTTON1) ++ return 0; ++ ++ if (JoyStatus_LCL & JOY_UP) ++ MouseReport->Y = -1; ++ else if (JoyStatus_LCL & JOY_DOWN) ++ MouseReport->Y = 1; ++ ++ if (JoyStatus_LCL & JOY_LEFT) ++ MouseReport->X = -1; ++ else if (JoyStatus_LCL & JOY_RIGHT) ++ MouseReport->X = 1; ++ ++ if (JoyStatus_LCL & JOY_PRESS) ++ MouseReport->Button |= (1 << 0); ++ ++ *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] ReportType The type of report that the host has sent, either HID_REPORT_ITEM_Out or HID_REPORT_ITEM_Feature ++ * \param[in] ReportData Pointer to a buffer where the received 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 uint8_t ReportType, ++ const void* ReportData, ++ const uint16_t ReportSize) ++{ ++ if (HIDInterfaceInfo == &Keyboard_HID_Interface) ++ { ++ uint8_t LEDMask = LEDS_NO_LEDS; ++ uint8_t* LEDReport = (uint8_t*)ReportData; ++ ++ if (*LEDReport & HID_KEYBOARD_LED_NUMLOCK) ++ LEDMask |= LEDS_LED1; ++ ++ if (*LEDReport & HID_KEYBOARD_LED_CAPSLOCK) ++ LEDMask |= LEDS_LED3; ++ ++ if (*LEDReport & HID_KEYBOARD_LED_SCROLLLOCK) ++ LEDMask |= LEDS_LED4; ++ ++ LEDs_SetAllLEDs(LEDMask); ++ } ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.h index 000000000,000000000..dba805d6a new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.h @@@ -1,0 -1,0 +1,84 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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. ++*/ ++ ++#ifndef _KEYBOARD_MOUSE_H_ ++#define _KEYBOARD_MOUSE_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <stdbool.h> ++ #include <string.h> ++ ++ #include "Descriptors.h" ++ ++ #include <LUFA/Drivers/Board/Joystick.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/Board/Buttons.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Platform/Platform.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 EVENT_USB_Device_Connect(void); ++ void EVENT_USB_Device_Disconnect(void); ++ void EVENT_USB_Device_ConfigurationChanged(void); ++ void EVENT_USB_Device_ControlRequest(void); ++ void EVENT_USB_Device_StartOfFrame(void); ++ ++ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, ++ uint8_t* const ReportID, ++ const uint8_t ReportType, ++ void* ReportData, ++ uint16_t* const ReportSize); ++ void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, ++ const uint8_t ReportID, ++ const uint8_t ReportType, ++ const void* ReportData, ++ const uint16_t ReportSize); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.txt index 000000000,000000000..262a84f0e new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.txt @@@ -1,0 -1,0 +1,81 @@@ ++/** \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 Dual HID Keyboard and Mouse Device Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * \li Series 6 USB AVRs (AT90USBxxx6) ++ * \li Series 4 USB AVRs (ATMEGAxxU4) ++ * \li Series 2 USB AVRs (AT90USBxx2, ATMEGAxxU2) ++ * \li Series AU XMEGA AVRs (ATXMEGAxxxAxU) ++ * \li Series B XMEGA AVRs (ATXMEGAxxxBx) ++ * \li Series C XMEGA AVRs (ATXMEGAxxxCx) ++ * ++ * \section Sec_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>Human Interface Device (HID)</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>N/A</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF HID Specification \n ++ * USBIF HID Usage Tables</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Low Speed Mode \n ++ * Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Keyboard/Mouse demonstration application. This gives a simple reference ++ * application for implementing a composite device containing both USB Keyboard ++ * and USB Mouse functionality using the basic USB HID drivers in all modern OSes ++ * (i.e. no special drivers required). This example uses two separate HID ++ * interfaces for each function. It is boot protocol compatible, and thus works under ++ * compatible BIOS as if it was a native keyboard and mouse (e.g. PS/2). ++ * ++ * On start-up the system will automatically enumerate and function ++ * as a keyboard when the USB connection to a host is present and the HWB is not ++ * pressed. When enabled, manipulate the joystick to send the letters ++ * a, b, c, d and e. See the USB HID documentation for more information ++ * on sending keyboard event and key presses. ++ * ++ * When the HWB is pressed, the mouse mode is enabled. When enabled, move the ++ * joystick to move the pointer, and push the joystick inwards to simulate a ++ * left-button click. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Device/ClassDriver/KeyboardMouse/asf.xml index 000000000,000000000..4b5ca0121 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/KeyboardMouse/asf.xml @@@ -1,0 -1,0 +1,62 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Keyboard and Mouse HID Device Demo (Class Driver APIs)" id="lufa.demos.device.class.keyboard_mouse.example.avr8"> ++ <require idref="lufa.demos.device.class.keyboard_mouse"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <project caption="Keyboard and Mouse HID Device Demo (Class Driver APIs)" id="lufa.demos.device.class.keyboard_mouse.example.xmega"> ++ <require idref="lufa.demos.device.class.keyboard_mouse"/> ++ <require idref="lufa.boards.dummy.xmega"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atxmega128a1u"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="32000000UL"/> ++ <build type="define" name="F_USB" value="48000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.device.class.keyboard_mouse" caption="Keyboard and Mouse HID Device Demo (Class Driver APIs)"> ++ <info type="description" value="summary"> ++ Keyboard and Mouse HID device demo, implementing a basic USB keyboard and mouse using a pair of HID interfaces. This demo uses the user-friendly USB Class Driver APIs to provide a simple, abstracted interface into the USB stack. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Class Driver APIs"/> ++ <keyword value="USB Device"/> ++ <keyword value="HID Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="KeyboardMouse.txt"/> ++ ++ <build type="c-source" value="KeyboardMouse.c"/> ++ <build type="c-source" value="Descriptors.c"/> ++ <build type="header-file" value="KeyboardMouse.h"/> ++ <build type="header-file" value="Descriptors.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ <require idref="lufa.drivers.board.joystick"/> ++ <require idref="lufa.drivers.board.buttons"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Device/ClassDriver/KeyboardMouse/doxyfile index 000000000,000000000..6648a78d1 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/KeyboardMouse/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Combined Keyboard/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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Device/ClassDriver/KeyboardMouse/makefile index 000000000,000000000..e4eddb736 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/KeyboardMouse/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = KeyboardMouse ++SRC = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Device/ClassDriver/KeyboardMouseMultiReport/Config/LUFAConfig.h index 000000000,000000000..299d2ec85 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/KeyboardMouseMultiReport/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,126 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++ #define USB_DEVICE_ONLY ++// #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #elif (ARCH == ARCH_XMEGA) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_RC32MCLKSRC | USB_OPT_BUSEVENT_PRIHIGH) ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++ #define MAX_ENDPOINT_INDEX 1 ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Device/ClassDriver/KeyboardMouseMultiReport/Descriptors.c index 000000000,000000000..af1d5380b new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/KeyboardMouseMultiReport/Descriptors.c @@@ -1,0 -1,0 +1,279 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special ++ * computer-readable structures which the host requests upon device enumeration, to determine ++ * the device's capabilities and functions. ++ */ ++ ++#include "Descriptors.h" ++ ++/** HID class report descriptor. This is a special descriptor constructed with values from the ++ * USBIF HID class specification to describe the reports and capabilities of the HID device. This ++ * descriptor is parsed by the host and its contents used to determine what data (and in what encoding) ++ * the device will send, and what it may be sent back from the host. Refer to the HID specification for ++ * more details on HID report descriptors. ++ * ++ * This descriptor describes the multiple possible reports of the HID interface's report structure. ++ */ ++const USB_Descriptor_HIDReport_Datatype_t PROGMEM HIDReport[] = ++{ ++ /* Mouse Report */ ++ HID_RI_USAGE_PAGE(8, 0x01), /* Generic Desktop */ ++ HID_RI_USAGE(8, 0x02), /* Mouse */ ++ HID_RI_COLLECTION(8, 0x01), /* Application */ ++ HID_RI_REPORT_ID(8, HID_REPORTID_MouseReport), ++ HID_RI_USAGE(8, 0x01), /* Pointer */ ++ HID_RI_COLLECTION(8, 0x00), /* Physical */ ++ HID_RI_USAGE_PAGE(8, 0x09), /* Button */ ++ HID_RI_USAGE_MINIMUM(8, 0x01), ++ HID_RI_USAGE_MAXIMUM(8, 0x03), ++ HID_RI_LOGICAL_MINIMUM(8, 0x00), ++ HID_RI_LOGICAL_MAXIMUM(8, 0x01), ++ HID_RI_REPORT_COUNT(8, 0x03), ++ HID_RI_REPORT_SIZE(8, 0x01), ++ HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), ++ HID_RI_REPORT_COUNT(8, 0x01), ++ HID_RI_REPORT_SIZE(8, 0x05), ++ HID_RI_INPUT(8, HID_IOF_CONSTANT), ++ HID_RI_USAGE_PAGE(8, 0x01), /* Generic Desktop */ ++ HID_RI_USAGE(8, 0x30), /* Usage X */ ++ HID_RI_USAGE(8, 0x31), /* Usage Y */ ++ HID_RI_LOGICAL_MINIMUM(8, -1), ++ HID_RI_LOGICAL_MAXIMUM(8, 1), ++ HID_RI_PHYSICAL_MINIMUM(8, -1), ++ HID_RI_PHYSICAL_MAXIMUM(8, 1), ++ HID_RI_REPORT_COUNT(8, 0x02), ++ HID_RI_REPORT_SIZE(8, 0x08), ++ HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE), ++ HID_RI_END_COLLECTION(0), ++ HID_RI_END_COLLECTION(0), ++ ++ /* Keyboard Report */ ++ HID_RI_USAGE_PAGE(8, 0x01), /* Generic Desktop */ ++ HID_RI_USAGE(8, 0x06), /* Keyboard */ ++ HID_RI_COLLECTION(8, 0x01), /* Application */ ++ HID_RI_REPORT_ID(8, HID_REPORTID_KeyboardReport), ++ HID_RI_USAGE_PAGE(8, 0x07), /* Key Codes */ ++ HID_RI_USAGE_MINIMUM(8, 0xE0), /* Keyboard Left Control */ ++ HID_RI_USAGE_MAXIMUM(8, 0xE7), /* Keyboard Right GUI */ ++ HID_RI_LOGICAL_MINIMUM(8, 0x00), ++ HID_RI_LOGICAL_MAXIMUM(8, 0x01), ++ HID_RI_REPORT_SIZE(8, 0x01), ++ HID_RI_REPORT_COUNT(8, 0x08), ++ HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), ++ HID_RI_REPORT_COUNT(8, 0x01), ++ HID_RI_REPORT_SIZE(8, 0x08), ++ HID_RI_INPUT(8, HID_IOF_CONSTANT), ++ HID_RI_USAGE_PAGE(8, 0x08), /* LEDs */ ++ HID_RI_USAGE_MINIMUM(8, 0x01), /* Num Lock */ ++ HID_RI_USAGE_MAXIMUM(8, 0x05), /* Kana */ ++ HID_RI_REPORT_COUNT(8, 0x05), ++ HID_RI_REPORT_SIZE(8, 0x01), ++ HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE), ++ HID_RI_REPORT_COUNT(8, 0x01), ++ HID_RI_REPORT_SIZE(8, 0x03), ++ HID_RI_OUTPUT(8, HID_IOF_CONSTANT), ++ HID_RI_LOGICAL_MINIMUM(8, 0x00), ++ HID_RI_LOGICAL_MAXIMUM(8, 0x65), ++ HID_RI_USAGE_PAGE(8, 0x07), /* Keyboard */ ++ HID_RI_USAGE_MINIMUM(8, 0x00), /* Reserved (no event indicated) */ ++ HID_RI_USAGE_MAXIMUM(8, 0x65), /* Keyboard Application */ ++ HID_RI_REPORT_COUNT(8, 0x06), ++ HID_RI_REPORT_SIZE(8, 0x08), ++ HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE), ++ HID_RI_END_COLLECTION(0), ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = ++{ ++ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, ++ ++ .USBSpecification = VERSION_BCD(1,1,0), ++ .Class = USB_CSCP_NoDeviceClass, ++ .SubClass = USB_CSCP_NoDeviceSubclass, ++ .Protocol = USB_CSCP_NoDeviceProtocol, ++ ++ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, ++ ++ .VendorID = 0x03EB, ++ .ProductID = 0x2066, ++ .ReleaseNumber = VERSION_BCD(0,0,1), ++ ++ .ManufacturerStrIndex = STRING_ID_Manufacturer, ++ .ProductStrIndex = STRING_ID_Product, ++ .SerialNumStrIndex = NO_DESCRIPTOR, ++ ++ .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. ++ */ ++const 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 = 1, ++ ++ .ConfigurationNumber = 1, ++ .ConfigurationStrIndex = NO_DESCRIPTOR, ++ ++ .ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED), ++ ++ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) ++ }, ++ ++ .HID_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_KeyboardAndMouse, ++ .AlternateSetting = 0x00, ++ ++ .TotalEndpoints = 1, ++ ++ .Class = HID_CSCP_HIDClass, ++ .SubClass = HID_CSCP_NonBootSubclass, ++ .Protocol = HID_CSCP_NonBootProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .HID_HIDData = ++ { ++ .Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID}, ++ ++ .HIDSpec = VERSION_BCD(1,1,1), ++ .CountryCode = 0x00, ++ .TotalReportDescriptors = 1, ++ .HIDReportType = HID_DTYPE_Report, ++ .HIDReportLength = sizeof(HIDReport) ++ }, ++ ++ .HID_ReportINEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = HID_IN_EPADDR, ++ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = HID_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_String_t PROGMEM LanguageString = USB_STRING_DESCRIPTOR_ARRAY(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"LUFA Multi HID Report 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 uint16_t wIndex, ++ const void** const DescriptorAddress) ++{ ++ const uint8_t DescriptorType = (wValue >> 8); ++ const uint8_t DescriptorNumber = (wValue & 0xFF); ++ ++ const void* Address = NULL; ++ uint16_t Size = NO_DESCRIPTOR; ++ ++ switch (DescriptorType) ++ { ++ case DTYPE_Device: ++ Address = &DeviceDescriptor; ++ Size = sizeof(USB_Descriptor_Device_t); ++ break; ++ case DTYPE_Configuration: ++ Address = &ConfigurationDescriptor; ++ Size = sizeof(USB_Descriptor_Configuration_t); ++ break; ++ case DTYPE_String: ++ switch (DescriptorNumber) ++ { ++ case STRING_ID_Language: ++ Address = &LanguageString; ++ Size = pgm_read_byte(&LanguageString.Header.Size); ++ break; ++ case STRING_ID_Manufacturer: ++ Address = &ManufacturerString; ++ Size = pgm_read_byte(&ManufacturerString.Header.Size); ++ break; ++ case STRING_ID_Product: ++ Address = &ProductString; ++ Size = pgm_read_byte(&ProductString.Header.Size); ++ break; ++ } ++ ++ break; ++ case HID_DTYPE_HID: ++ Address = &ConfigurationDescriptor.HID_HIDData; ++ Size = sizeof(USB_HID_Descriptor_HID_t); ++ break; ++ case HID_DTYPE_Report: ++ Address = &HIDReport; ++ Size = sizeof(HIDReport); ++ break; ++ } ++ ++ *DescriptorAddress = Address; ++ return Size; ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/KeyboardMouseMultiReport/Descriptors.h index 000000000,000000000..aaaf550c8 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/KeyboardMouseMultiReport/Descriptors.h @@@ -1,0 -1,0 +1,101 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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> ++ ++ /* 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; ++ ++ // Combined Keyboard/Mouse HID Interface ++ USB_Descriptor_Interface_t HID_Interface; ++ USB_HID_Descriptor_HID_t HID_HIDData; ++ USB_Descriptor_Endpoint_t HID_ReportINEndpoint; ++ } USB_Descriptor_Configuration_t; ++ ++ /** Enum for the device interface descriptor IDs within the device. Each interface descriptor ++ * should have a unique ID index associated with it, which can be used to refer to the ++ * interface from other descriptors. ++ */ ++ enum InterfaceDescriptors_t ++ { ++ INTERFACE_ID_KeyboardAndMouse = 0, /**< Combined keyboard and mouse interface descriptor ID */ ++ }; ++ ++ /** Enum for the device string descriptor IDs within the device. Each string descriptor should ++ * have a unique ID index associated with it, which can be used to refer to the string from ++ * other descriptors. ++ */ ++ enum StringDescriptors_t ++ { ++ STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */ ++ STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */ ++ STRING_ID_Product = 2, /**< Product string ID */ ++ }; ++ ++ /* Macros: */ ++ /** Endpoint address of the HID reporting IN endpoint. */ ++ #define HID_IN_EPADDR (ENDPOINT_DIR_IN | 1) ++ ++ /** Size in bytes of each of the HID reporting IN endpoint. */ ++ #define HID_EPSIZE 8 ++ ++ /* Enums: */ ++ /** Enum for the HID report IDs used in the device. */ ++ enum ++ { ++ HID_REPORTID_MouseReport = 0x01, /**< Report ID for the Mouse report within the device. */ ++ HID_REPORTID_KeyboardReport = 0x02, /**< Report ID for the Keyboard report within the device. */ ++ } HID_Report_IDs; ++ ++ /* Function Prototypes: */ ++ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ++ const uint16_t wIndex, ++ const void** const DescriptorAddress) ++ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/KeyboardMouseMultiReport/KeyboardMouseMultiReport.c index 000000000,000000000..c49124974 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/KeyboardMouseMultiReport/KeyboardMouseMultiReport.c @@@ -1,0 -1,0 +1,237 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 KeyboardMouseMultiReport demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "KeyboardMouseMultiReport.h" ++ ++/** Buffer to hold the previously generated HID report, for comparison purposes inside the HID class driver. */ ++static uint8_t PrevHIDReportBuffer[MAX(sizeof(USB_KeyboardReport_Data_t), 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 Device_HID_Interface = ++ { ++ .Config = ++ { ++ .InterfaceNumber = INTERFACE_ID_KeyboardAndMouse, ++ .ReportINEndpoint = ++ { ++ .Address = HID_IN_EPADDR, ++ .Size = HID_EPSIZE, ++ .Banks = 1, ++ }, ++ .PrevReportINBuffer = PrevHIDReportBuffer, ++ .PrevReportINBufferSize = sizeof(PrevHIDReportBuffer), ++ }, ++ }; ++ ++ ++/** 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); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ HID_Device_USBTask(&Device_HID_Interface); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware() ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#elif (ARCH == ARCH_XMEGA) ++ /* Start the PLL to multiply the 2MHz RC oscillator to 32MHz and switch the CPU core to run from it */ ++ XMEGACLK_StartPLL(CLOCK_SRC_INT_RC2MHZ, 2000000, F_CPU); ++ XMEGACLK_SetCPUClockSource(CLOCK_SRC_PLL); ++ ++ /* Start the 32MHz internal RC oscillator and start the DFLL to increase it to 48MHz using the USB SOF as a reference */ ++ XMEGACLK_StartInternalOscillator(CLOCK_SRC_INT_RC32MHZ); ++ XMEGACLK_StartDFLL(CLOCK_SRC_INT_RC32MHZ, DFLL_REF_INT_USBSOF, F_USB); ++ ++ PMIC.CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm; ++#endif ++ ++ /* Hardware Initialization */ ++ Joystick_Init(); ++ LEDs_Init(); ++ USB_Init(); ++} ++ ++/** 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) ++{ ++ bool ConfigSuccess = true; ++ ++ ConfigSuccess &= HID_Device_ConfigureEndpoints(&Device_HID_Interface); ++ ++ USB_Device_EnableSOFEvents(); ++ ++ LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); ++} ++ ++/** Event handler for the library USB Control Request reception event. */ ++void EVENT_USB_Device_ControlRequest(void) ++{ ++ HID_Device_ProcessControlRequest(&Device_HID_Interface); ++} ++ ++/** Event handler for the USB device Start Of Frame event. */ ++void EVENT_USB_Device_StartOfFrame(void) ++{ ++ HID_Device_MillisecondElapsed(&Device_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[in] ReportType Type of the report to create, either HID_REPORT_ITEM_In or HID_REPORT_ITEM_Feature ++ * \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 \c true to force the sending of the report, \c 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, ++ const uint8_t ReportType, ++ void* ReportData, ++ uint16_t* const ReportSize) ++{ ++ uint8_t JoyStatus_LCL = Joystick_GetStatus(); ++ uint8_t ButtonStatus_LCL = Buttons_GetStatus(); ++ ++ if (!(ButtonStatus_LCL & BUTTONS_BUTTON1)) ++ { ++ USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData; ++ ++ KeyboardReport->Modifier = HID_KEYBOARD_MODIFIER_LEFTSHIFT; ++ ++ if (JoyStatus_LCL & JOY_UP) ++ KeyboardReport->KeyCode[0] = HID_KEYBOARD_SC_A; ++ else if (JoyStatus_LCL & JOY_DOWN) ++ KeyboardReport->KeyCode[0] = HID_KEYBOARD_SC_B; ++ ++ if (JoyStatus_LCL & JOY_LEFT) ++ KeyboardReport->KeyCode[0] = HID_KEYBOARD_SC_C; ++ else if (JoyStatus_LCL & JOY_RIGHT) ++ KeyboardReport->KeyCode[0] = HID_KEYBOARD_SC_D; ++ ++ if (JoyStatus_LCL & JOY_PRESS) ++ KeyboardReport->KeyCode[0] = HID_KEYBOARD_SC_E; ++ ++ *ReportID = HID_REPORTID_KeyboardReport; ++ *ReportSize = sizeof(USB_KeyboardReport_Data_t); ++ return false; ++ } ++ else ++ { ++ USB_MouseReport_Data_t* MouseReport = (USB_MouseReport_Data_t*)ReportData; ++ ++ if (JoyStatus_LCL & JOY_UP) ++ MouseReport->Y = -1; ++ else if (JoyStatus_LCL & JOY_DOWN) ++ MouseReport->Y = 1; ++ ++ if (JoyStatus_LCL & JOY_LEFT) ++ MouseReport->X = -1; ++ else if (JoyStatus_LCL & JOY_RIGHT) ++ MouseReport->X = 1; ++ ++ if (JoyStatus_LCL & JOY_PRESS) ++ MouseReport->Button |= (1 << 0); ++ ++ *ReportID = HID_REPORTID_MouseReport; ++ *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] ReportType The type of report that the host has sent, either HID_REPORT_ITEM_Out or HID_REPORT_ITEM_Feature ++ * \param[in] ReportData Pointer to a buffer where the received 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 uint8_t ReportType, ++ const void* ReportData, ++ const uint16_t ReportSize) ++{ ++ uint8_t LEDMask = LEDS_NO_LEDS; ++ uint8_t* LEDReport = (uint8_t*)ReportData; ++ ++ if (*LEDReport & HID_KEYBOARD_LED_NUMLOCK) ++ LEDMask |= LEDS_LED1; ++ ++ if (*LEDReport & HID_KEYBOARD_LED_CAPSLOCK) ++ LEDMask |= LEDS_LED3; ++ ++ if (*LEDReport & HID_KEYBOARD_LED_SCROLLLOCK) ++ LEDMask |= LEDS_LED4; ++ ++ LEDs_SetAllLEDs(LEDMask); ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/KeyboardMouseMultiReport/KeyboardMouseMultiReport.h index 000000000,000000000..dba805d6a new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/KeyboardMouseMultiReport/KeyboardMouseMultiReport.h @@@ -1,0 -1,0 +1,84 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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. ++*/ ++ ++#ifndef _KEYBOARD_MOUSE_H_ ++#define _KEYBOARD_MOUSE_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <stdbool.h> ++ #include <string.h> ++ ++ #include "Descriptors.h" ++ ++ #include <LUFA/Drivers/Board/Joystick.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/Board/Buttons.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Platform/Platform.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 EVENT_USB_Device_Connect(void); ++ void EVENT_USB_Device_Disconnect(void); ++ void EVENT_USB_Device_ConfigurationChanged(void); ++ void EVENT_USB_Device_ControlRequest(void); ++ void EVENT_USB_Device_StartOfFrame(void); ++ ++ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, ++ uint8_t* const ReportID, ++ const uint8_t ReportType, ++ void* ReportData, ++ uint16_t* const ReportSize); ++ void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, ++ const uint8_t ReportID, ++ const uint8_t ReportType, ++ const void* ReportData, ++ const uint16_t ReportSize); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/KeyboardMouseMultiReport/KeyboardMouseMultiReport.txt index 000000000,000000000..ed55f595a new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/KeyboardMouseMultiReport/KeyboardMouseMultiReport.txt @@@ -1,0 -1,0 +1,78 @@@ ++/** \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 Multiple Report HID Keyboard and Mouse Device Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * \li Series 6 USB AVRs (AT90USBxxx6) ++ * \li Series 4 USB AVRs (ATMEGAxxU4) ++ * \li Series 2 USB AVRs (AT90USBxx2, ATMEGAxxU2) ++ * \li Series AU XMEGA AVRs (ATXMEGAxxxAxU) ++ * \li Series B XMEGA AVRs (ATXMEGAxxxBx) ++ * \li Series C XMEGA AVRs (ATXMEGAxxxCx) ++ * ++ * \section Sec_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>Human Interface Device (HID)</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>N/A</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF HID Specification \n ++ * USBIF HID Usage Tables</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Low Speed Mode \n ++ * Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Keyboard/Mouse demonstration application, using a single HID interface. This gives ++ * a simple reference application for implementing a multiple HID report device ++ * containing both USB Keyboard and USB Mouse functionality using the basic USB HID ++ * drivers in all modern OSes (i.e. no special drivers required). This example uses a ++ * single HID interface that is shared between the two functions. ++ * ++ * On start-up the system will automatically enumerate and function as a keyboard when ++ * the USB connection to a host is present and the HWB is not pressed. When enabled, ++ * manipulate the joystick to send the letters a, b, c, d and e. See the USB HID ++ * documentation for more information on sending keyboard event and key presses. ++ * ++ * When the HWB is pressed, the mouse mode is enabled. When enabled, move the joystick ++ * to move the pointer, and push the joystick inwards to simulate a left-button click. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Device/ClassDriver/KeyboardMouseMultiReport/asf.xml index 000000000,000000000..39487fd8a new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/KeyboardMouseMultiReport/asf.xml @@@ -1,0 -1,0 +1,61 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Keyboard and Mouse HID (Multi Report) Device Demo (Class Driver APIs)" id="lufa.demos.device.class.keyboard_mouse_mr.example.avr8"> ++ <require idref="lufa.demos.device.class.keyboard_mouse_mr"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <project caption="Keyboard and Mouse HID (Multi Report) Device Demo (Class Driver APIs)" id="lufa.demos.device.class.keyboard_mouse_mr.example.xmega"> ++ <require idref="lufa.demos.device.class.keyboard_mouse_mr"/> ++ <require idref="lufa.boards.dummy.xmega"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atxmega128a1u"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="32000000UL"/> ++ <build type="define" name="F_USB" value="48000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.device.class.keyboard_mouse_mr" caption="Keyboard and Mouse HID (Multi Report) Device Demo (Class Driver APIs)"> ++ <info type="description" value="summary"> ++ Keyboard and Mouse HID device demo, implementing a basic USB keyboard and mouse using a single HID interface and multiple logical reports. This demo uses the user-friendly USB Class Driver APIs to provide a simple, abstracted interface into the USB stack. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Class Driver APIs"/> ++ <keyword value="USB Device"/> ++ <keyword value="HID Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="KeyboardMouseMultiReport.txt"/> ++ ++ <build type="c-source" value="KeyboardMouseMultiReport.c"/> ++ <build type="c-source" value="Descriptors.c"/> ++ <build type="header-file" value="KeyboardMouseMultiReport.h"/> ++ <build type="header-file" value="Descriptors.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.board.leds"/> ++ <require idref="lufa.drivers.board.joystick"/> ++ <require idref="lufa.drivers.board.buttons"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Device/ClassDriver/KeyboardMouseMultiReport/doxyfile index 000000000,000000000..6ea750cfc new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/KeyboardMouseMultiReport/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Combined Keyboard/Mouse (Multiple HID Report) 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Device/ClassDriver/KeyboardMouseMultiReport/makefile index 000000000,000000000..22957f87d new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/KeyboardMouseMultiReport/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = KeyboardMouseMultiReport ++SRC = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Device/ClassDriver/MIDI/Config/LUFAConfig.h index 000000000,000000000..00eefc7bf new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/MIDI/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,126 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++ #define USB_DEVICE_ONLY ++// #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #elif (ARCH == ARCH_XMEGA) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_RC32MCLKSRC | USB_OPT_BUSEVENT_PRIHIGH) ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++ #define MAX_ENDPOINT_INDEX 2 ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Device/ClassDriver/MIDI/Descriptors.c index 000000000,000000000..b4bcea1ee new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/MIDI/Descriptors.c @@@ -1,0 -1,0 +1,314 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special ++ * computer-readable structures which the host requests upon device enumeration, to determine ++ * the device's capabilities and functions. ++ */ ++ ++#include "Descriptors.h" ++ ++/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall ++ * device characteristics, including the supported USB version, control endpoint size and the ++ * number of device configurations. The descriptor is read out by the USB host when the enumeration ++ * process begins. ++ */ ++const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = ++{ ++ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, ++ ++ .USBSpecification = VERSION_BCD(1,1,0), ++ .Class = USB_CSCP_NoDeviceClass, ++ .SubClass = USB_CSCP_NoDeviceSubclass, ++ .Protocol = USB_CSCP_NoDeviceProtocol, ++ ++ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, ++ ++ .VendorID = 0x03EB, ++ .ProductID = 0x2048, ++ .ReleaseNumber = VERSION_BCD(0,0,1), ++ ++ .ManufacturerStrIndex = STRING_ID_Manufacturer, ++ .ProductStrIndex = STRING_ID_Product, ++ .SerialNumStrIndex = NO_DESCRIPTOR, ++ ++ .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. ++ */ ++const 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 = 2, ++ ++ .ConfigurationNumber = 1, ++ .ConfigurationStrIndex = NO_DESCRIPTOR, ++ ++ .ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED), ++ ++ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) ++ }, ++ ++ .Audio_ControlInterface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_AudioControl, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 0, ++ ++ .Class = AUDIO_CSCP_AudioClass, ++ .SubClass = AUDIO_CSCP_ControlSubclass, ++ .Protocol = AUDIO_CSCP_ControlProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .Audio_ControlInterface_SPC = ++ { ++ .Header = {.Size = sizeof(USB_Audio_Descriptor_Interface_AC_t), .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_Header, ++ ++ .ACSpecification = VERSION_BCD(1,0,0), ++ .TotalLength = sizeof(USB_Audio_Descriptor_Interface_AC_t), ++ ++ .InCollection = 1, ++ .InterfaceNumber = INTERFACE_ID_AudioStream, ++ }, ++ ++ .Audio_StreamInterface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_AudioStream, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 2, ++ ++ .Class = AUDIO_CSCP_AudioClass, ++ .SubClass = AUDIO_CSCP_MIDIStreamingSubclass, ++ .Protocol = AUDIO_CSCP_StreamingProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .Audio_StreamInterface_SPC = ++ { ++ .Header = {.Size = sizeof(USB_MIDI_Descriptor_AudioInterface_AS_t), .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_General, ++ ++ .AudioSpecification = VERSION_BCD(1,0,0), ++ ++ .TotalLength = (sizeof(USB_Descriptor_Configuration_t) - ++ offsetof(USB_Descriptor_Configuration_t, Audio_StreamInterface_SPC)) ++ }, ++ ++ .MIDI_In_Jack_Emb = ++ { ++ .Header = {.Size = sizeof(USB_MIDI_Descriptor_InputJack_t), .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_InputTerminal, ++ ++ .JackType = MIDI_JACKTYPE_Embedded, ++ .JackID = 0x01, ++ ++ .JackStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .MIDI_In_Jack_Ext = ++ { ++ .Header = {.Size = sizeof(USB_MIDI_Descriptor_InputJack_t), .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_InputTerminal, ++ ++ .JackType = MIDI_JACKTYPE_External, ++ .JackID = 0x02, ++ ++ .JackStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .MIDI_Out_Jack_Emb = ++ { ++ .Header = {.Size = sizeof(USB_MIDI_Descriptor_OutputJack_t), .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_OutputTerminal, ++ ++ .JackType = MIDI_JACKTYPE_Embedded, ++ .JackID = 0x03, ++ ++ .NumberOfPins = 1, ++ .SourceJackID = {0x02}, ++ .SourcePinID = {0x01}, ++ ++ .JackStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .MIDI_Out_Jack_Ext = ++ { ++ .Header = {.Size = sizeof(USB_MIDI_Descriptor_OutputJack_t), .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_OutputTerminal, ++ ++ .JackType = MIDI_JACKTYPE_External, ++ .JackID = 0x04, ++ ++ .NumberOfPins = 1, ++ .SourceJackID = {0x01}, ++ .SourcePinID = {0x01}, ++ ++ .JackStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .MIDI_In_Jack_Endpoint = ++ { ++ .Endpoint = ++ { ++ .Header = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Std_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = MIDI_STREAM_OUT_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = MIDI_STREAM_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++ ++ .Refresh = 0, ++ .SyncEndpointNumber = 0 ++ }, ++ ++ .MIDI_In_Jack_Endpoint_SPC = ++ { ++ .Header = {.Size = sizeof(USB_MIDI_Descriptor_Jack_Endpoint_t), .Type = DTYPE_CSEndpoint}, ++ .Subtype = AUDIO_DSUBTYPE_CSEndpoint_General, ++ ++ .TotalEmbeddedJacks = 0x01, ++ .AssociatedJackID = {0x01} ++ }, ++ ++ .MIDI_Out_Jack_Endpoint = ++ { ++ .Endpoint = ++ { ++ .Header = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Std_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = MIDI_STREAM_IN_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = MIDI_STREAM_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++ ++ .Refresh = 0, ++ .SyncEndpointNumber = 0 ++ }, ++ ++ .MIDI_Out_Jack_Endpoint_SPC = ++ { ++ .Header = {.Size = sizeof(USB_MIDI_Descriptor_Jack_Endpoint_t), .Type = DTYPE_CSEndpoint}, ++ .Subtype = AUDIO_DSUBTYPE_CSEndpoint_General, ++ ++ .TotalEmbeddedJacks = 0x01, ++ .AssociatedJackID = {0x03} ++ } ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_String_t PROGMEM LanguageString = USB_STRING_DESCRIPTOR_ARRAY(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"LUFA MIDI 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 uint16_t wIndex, ++ const void** const DescriptorAddress) ++{ ++ const uint8_t DescriptorType = (wValue >> 8); ++ const uint8_t DescriptorNumber = (wValue & 0xFF); ++ ++ const void* Address = NULL; ++ uint16_t Size = NO_DESCRIPTOR; ++ ++ switch (DescriptorType) ++ { ++ case DTYPE_Device: ++ Address = &DeviceDescriptor; ++ Size = sizeof(USB_Descriptor_Device_t); ++ break; ++ case DTYPE_Configuration: ++ Address = &ConfigurationDescriptor; ++ Size = sizeof(USB_Descriptor_Configuration_t); ++ break; ++ case DTYPE_String: ++ switch (DescriptorNumber) ++ { ++ case STRING_ID_Language: ++ Address = &LanguageString; ++ Size = pgm_read_byte(&LanguageString.Header.Size); ++ break; ++ case STRING_ID_Manufacturer: ++ Address = &ManufacturerString; ++ Size = pgm_read_byte(&ManufacturerString.Header.Size); ++ break; ++ case STRING_ID_Product: ++ Address = &ProductString; ++ Size = pgm_read_byte(&ProductString.Header.Size); ++ break; ++ } ++ ++ break; ++ } ++ ++ *DescriptorAddress = Address; ++ return Size; ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/MIDI/Descriptors.h index 000000000,000000000..44737d7c4 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/MIDI/Descriptors.h @@@ -1,0 -1,0 +1,108 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * Header file for Descriptors.c. ++ */ ++ ++#ifndef _DESCRIPTORS_H_ ++#define _DESCRIPTORS_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include <avr/pgmspace.h> ++ ++ /* Macros: */ ++ /** Endpoint address of the MIDI streaming data IN endpoint, for device-to-host data transfers. */ ++ #define MIDI_STREAM_IN_EPADDR (ENDPOINT_DIR_IN | 2) ++ ++ /** Endpoint address of the MIDI streaming data OUT endpoint, for host-to-device data transfers. */ ++ #define MIDI_STREAM_OUT_EPADDR (ENDPOINT_DIR_OUT | 1) ++ ++ /** Endpoint size in bytes of the Audio isochronous streaming data IN and OUT endpoints. */ ++ #define MIDI_STREAM_EPSIZE 64 ++ ++ /* 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; ++ ++ // MIDI Audio Control Interface ++ USB_Descriptor_Interface_t Audio_ControlInterface; ++ USB_Audio_Descriptor_Interface_AC_t Audio_ControlInterface_SPC; ++ ++ // MIDI Audio Streaming Interface ++ USB_Descriptor_Interface_t Audio_StreamInterface; ++ USB_MIDI_Descriptor_AudioInterface_AS_t Audio_StreamInterface_SPC; ++ USB_MIDI_Descriptor_InputJack_t MIDI_In_Jack_Emb; ++ USB_MIDI_Descriptor_InputJack_t MIDI_In_Jack_Ext; ++ USB_MIDI_Descriptor_OutputJack_t MIDI_Out_Jack_Emb; ++ USB_MIDI_Descriptor_OutputJack_t MIDI_Out_Jack_Ext; ++ USB_Audio_Descriptor_StreamEndpoint_Std_t MIDI_In_Jack_Endpoint; ++ USB_MIDI_Descriptor_Jack_Endpoint_t MIDI_In_Jack_Endpoint_SPC; ++ USB_Audio_Descriptor_StreamEndpoint_Std_t MIDI_Out_Jack_Endpoint; ++ USB_MIDI_Descriptor_Jack_Endpoint_t MIDI_Out_Jack_Endpoint_SPC; ++ } USB_Descriptor_Configuration_t; ++ ++ /** Enum for the device interface descriptor IDs within the device. Each interface descriptor ++ * should have a unique ID index associated with it, which can be used to refer to the ++ * interface from other descriptors. ++ */ ++ enum InterfaceDescriptors_t ++ { ++ INTERFACE_ID_AudioControl = 0, /**< Audio control interface descriptor ID */ ++ INTERFACE_ID_AudioStream = 1, /**< Audio streaming interface descriptor ID */ ++ }; ++ ++ /** Enum for the device string descriptor IDs within the device. Each string descriptor should ++ * have a unique ID index associated with it, which can be used to refer to the string from ++ * other descriptors. ++ */ ++ enum StringDescriptors_t ++ { ++ STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */ ++ STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */ ++ STRING_ID_Product = 2, /**< Product string ID */ ++ }; ++ ++ /* Function Prototypes: */ ++ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ++ const uint16_t wIndex, ++ const void** const DescriptorAddress) ++ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/MIDI/MIDI.c index 000000000,000000000..d52542234 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/MIDI/MIDI.c @@@ -1,0 -1,0 +1,211 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 MIDI demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "MIDI.h" ++ ++/** LUFA MIDI Class driver interface configuration and state information. This structure is ++ * passed to all MIDI Class driver functions, so that multiple instances of the same class ++ * within a device can be differentiated from one another. ++ */ ++USB_ClassInfo_MIDI_Device_t Keyboard_MIDI_Interface = ++ { ++ .Config = ++ { ++ .StreamingInterfaceNumber = INTERFACE_ID_AudioStream, ++ .DataINEndpoint = ++ { ++ .Address = MIDI_STREAM_IN_EPADDR, ++ .Size = MIDI_STREAM_EPSIZE, ++ .Banks = 1, ++ }, ++ .DataOUTEndpoint = ++ { ++ .Address = MIDI_STREAM_OUT_EPADDR, ++ .Size = MIDI_STREAM_EPSIZE, ++ .Banks = 1, ++ }, ++ }, ++ }; ++ ++ ++/** 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); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ CheckJoystickMovement(); ++ ++ MIDI_EventPacket_t ReceivedMIDIEvent; ++ while (MIDI_Device_ReceiveEventPacket(&Keyboard_MIDI_Interface, &ReceivedMIDIEvent)) ++ { ++ if ((ReceivedMIDIEvent.Event == MIDI_EVENT(0, MIDI_COMMAND_NOTE_ON)) && (ReceivedMIDIEvent.Data3 > 0)) ++ LEDs_SetAllLEDs(ReceivedMIDIEvent.Data2 > 64 ? LEDS_LED1 : LEDS_LED2); ++ else ++ LEDs_SetAllLEDs(LEDS_NO_LEDS); ++ } ++ ++ MIDI_Device_USBTask(&Keyboard_MIDI_Interface); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#elif (ARCH == ARCH_XMEGA) ++ /* Start the PLL to multiply the 2MHz RC oscillator to 32MHz and switch the CPU core to run from it */ ++ XMEGACLK_StartPLL(CLOCK_SRC_INT_RC2MHZ, 2000000, F_CPU); ++ XMEGACLK_SetCPUClockSource(CLOCK_SRC_PLL); ++ ++ /* Start the 32MHz internal RC oscillator and start the DFLL to increase it to 48MHz using the USB SOF as a reference */ ++ XMEGACLK_StartInternalOscillator(CLOCK_SRC_INT_RC32MHZ); ++ XMEGACLK_StartDFLL(CLOCK_SRC_INT_RC32MHZ, DFLL_REF_INT_USBSOF, F_USB); ++ ++ PMIC.CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm; ++#endif ++ ++ /* Hardware Initialization */ ++ Joystick_Init(); ++ LEDs_Init(); ++ Buttons_Init(); ++ USB_Init(); ++} ++ ++/** Checks for changes in the position of the board joystick, sending MIDI events to the host upon each change. */ ++void CheckJoystickMovement(void) ++{ ++ static uint8_t PrevJoystickStatus; ++ ++ uint8_t MIDICommand = 0; ++ uint8_t MIDIPitch; ++ ++ /* Get current joystick mask, XOR with previous to detect joystick changes */ ++ uint8_t JoystickStatus = Joystick_GetStatus(); ++ uint8_t JoystickChanges = (JoystickStatus ^ PrevJoystickStatus); ++ ++ /* Get board button status - if pressed use channel 10 (percussion), otherwise use channel 1 */ ++ uint8_t Channel = ((Buttons_GetStatus() & BUTTONS_BUTTON1) ? MIDI_CHANNEL(10) : MIDI_CHANNEL(1)); ++ ++ if (JoystickChanges & JOY_LEFT) ++ { ++ MIDICommand = ((JoystickStatus & JOY_LEFT)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF); ++ MIDIPitch = 0x3C; ++ } ++ ++ if (JoystickChanges & JOY_UP) ++ { ++ MIDICommand = ((JoystickStatus & JOY_UP)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF); ++ MIDIPitch = 0x3D; ++ } ++ ++ if (JoystickChanges & JOY_RIGHT) ++ { ++ MIDICommand = ((JoystickStatus & JOY_RIGHT)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF); ++ MIDIPitch = 0x3E; ++ } ++ ++ if (JoystickChanges & JOY_DOWN) ++ { ++ MIDICommand = ((JoystickStatus & JOY_DOWN)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF); ++ MIDIPitch = 0x3F; ++ } ++ ++ if (JoystickChanges & JOY_PRESS) ++ { ++ MIDICommand = ((JoystickStatus & JOY_PRESS)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF); ++ MIDIPitch = 0x3B; ++ } ++ ++ if (MIDICommand) ++ { ++ MIDI_EventPacket_t MIDIEvent = (MIDI_EventPacket_t) ++ { ++ .Event = MIDI_EVENT(0, MIDICommand), ++ ++ .Data1 = MIDICommand | Channel, ++ .Data2 = MIDIPitch, ++ .Data3 = MIDI_STANDARD_VELOCITY, ++ }; ++ ++ MIDI_Device_SendEventPacket(&Keyboard_MIDI_Interface, &MIDIEvent); ++ MIDI_Device_Flush(&Keyboard_MIDI_Interface); ++ } ++ ++ PrevJoystickStatus = JoystickStatus; ++} ++ ++/** 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) ++{ ++ bool ConfigSuccess = true; ++ ++ ConfigSuccess &= MIDI_Device_ConfigureEndpoints(&Keyboard_MIDI_Interface); ++ ++ LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); ++} ++ ++/** Event handler for the library USB Control Request reception event. */ ++void EVENT_USB_Device_ControlRequest(void) ++{ ++ MIDI_Device_ProcessControlRequest(&Keyboard_MIDI_Interface); ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/MIDI/MIDI.h index 000000000,000000000..c59b4253d new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/MIDI/MIDI.h @@@ -1,0 -1,0 +1,78 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 MIDI.c. ++ */ ++ ++#ifndef _MIDI_H_ ++#define _MIDI_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <stdbool.h> ++ #include <string.h> ++ ++ #include "Descriptors.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/Platform/Platform.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_ControlRequest(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/MIDI/MIDI.txt index 000000000,000000000..97a92a190 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/MIDI/MIDI.txt @@@ -1,0 -1,0 +1,78 @@@ ++/** \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 MIDI Input Device Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * \li Series 6 USB AVRs (AT90USBxxx6) ++ * \li Series 4 USB AVRs (ATMEGAxxU4) ++ * \li Series 2 USB AVRs (AT90USBxx2, ATMEGAxxU2) ++ * \li Series AU XMEGA AVRs (ATXMEGAxxxAxU) ++ * \li Series B XMEGA AVRs (ATXMEGAxxxBx) ++ * \li Series C XMEGA AVRs (ATXMEGAxxxCx) ++ * ++ * \section Sec_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>Audio Class</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>Standard Audio Device</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF Audio Class Specification \n ++ * USB-MIDI Audio Class Extension Specification \n ++ * General MIDI Specification</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * MIDI demonstration application. This gives a simple reference ++ * application for implementing the USB-MIDI class in USB devices. ++ * It is built upon the USB Audio class. ++ * ++ * Joystick movements are translated into note on/off messages and ++ * are sent to the host PC as MIDI streams which can be read by any ++ * MIDI program supporting MIDI IN devices. ++ * ++ * If the HWB is not pressed, channel 1 (default piano) is used. If ++ * the HWB is pressed, then channel 10 (default percussion) is selected. ++ * ++ * This device implements MIDI-THRU mode, with the IN MIDI data being ++ * generated by the device itself. OUT MIDI data is discarded. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Device/ClassDriver/MIDI/asf.xml index 000000000,000000000..33a4fd583 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/MIDI/asf.xml @@@ -1,0 -1,0 +1,62 @@@ ++<asf xmlversion="1.0"> ++ <project caption="MIDI Device Demo (Class Driver APIs)" id="lufa.demos.device.class.midi.example.avr8"> ++ <require idref="lufa.demos.device.class.midi"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <project caption="MIDI Device Demo (Class Driver APIs)" id="lufa.demos.device.class.midi.example.xmega"> ++ <require idref="lufa.demos.device.class.midi"/> ++ <require idref="lufa.boards.dummy.xmega"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atxmega128a1u"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="32000000UL"/> ++ <build type="define" name="F_USB" value="48000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.device.class.midi" caption="MIDI Device Demo (Class Driver APIs)"> ++ <info type="description" value="summary"> ++ MIDI device demo, implementing a basic USB MIDI device that can send messages to the host. This demo uses the user-friendly USB Class Driver APIs to provide a simple, abstracted interface into the USB stack. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Class Driver APIs"/> ++ <keyword value="USB Device"/> ++ <keyword value="MIDI Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="MIDI.txt"/> ++ ++ <build type="c-source" value="MIDI.c"/> ++ <build type="c-source" value="Descriptors.c"/> ++ <build type="header-file" value="MIDI.h"/> ++ <build type="header-file" value="Descriptors.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ <require idref="lufa.drivers.board.buttons"/> ++ <require idref="lufa.drivers.board.joystick"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Device/ClassDriver/MIDI/doxyfile index 000000000,000000000..e7bfea0c0 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/MIDI/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - MIDI 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Device/ClassDriver/MIDI/makefile index 000000000,000000000..f030a1e72 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/MIDI/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = MIDI ++SRC = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Device/ClassDriver/MassStorage/Config/AppConfig.h index 000000000,000000000..b18b2c414 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/MassStorage/Config/AppConfig.h @@@ -1,0 -1,0 +1,50 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief Application Configuration Header File ++ * ++ * This is a header file which is be used to configure some of ++ * the application's compile time options, as an alternative to ++ * specifying the compile time constants supplied through a ++ * makefile or build system. ++ * ++ * For information on what each token does, refer to the ++ * \ref Sec_Options section of the application documentation. ++ */ ++ ++#ifndef _APP_CONFIG_H_ ++#define _APP_CONFIG_H_ ++ ++ #define TOTAL_LUNS 1 ++ ++ #define DISK_READ_ONLY false ++ ++#endif diff --cc lib/lufa/Demos/Device/ClassDriver/MassStorage/Config/LUFAConfig.h index 000000000,000000000..0ec4635eb new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/MassStorage/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,126 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++ #define USB_DEVICE_ONLY ++// #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++ #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #elif (ARCH == ARCH_XMEGA) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_RC32MCLKSRC | USB_OPT_BUSEVENT_PRIHIGH) ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++ #define MAX_ENDPOINT_INDEX 4 ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Device/ClassDriver/MassStorage/Descriptors.c index 000000000,000000000..115a7482c new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/MassStorage/Descriptors.c @@@ -1,0 -1,0 +1,194 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special ++ * computer-readable structures which the host requests upon device enumeration, to determine ++ * the device's capabilities and functions. ++ */ ++ ++#include "Descriptors.h" ++ ++ ++/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall ++ * device characteristics, including the supported USB version, control endpoint size and the ++ * number of device configurations. The descriptor is read out by the USB host when the enumeration ++ * process begins. ++ */ ++const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = ++{ ++ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, ++ ++ .USBSpecification = VERSION_BCD(1,1,0), ++ .Class = USB_CSCP_NoDeviceClass, ++ .SubClass = USB_CSCP_NoDeviceSubclass, ++ .Protocol = USB_CSCP_NoDeviceProtocol, ++ ++ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, ++ ++ .VendorID = 0x03EB, ++ .ProductID = 0x2045, ++ .ReleaseNumber = VERSION_BCD(0,0,1), ++ ++ .ManufacturerStrIndex = STRING_ID_Manufacturer, ++ .ProductStrIndex = STRING_ID_Product, ++ .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. ++ */ ++const 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 = 1, ++ ++ .ConfigurationNumber = 1, ++ .ConfigurationStrIndex = NO_DESCRIPTOR, ++ ++ .ConfigAttributes = USB_CONFIG_ATTR_RESERVED, ++ ++ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) ++ }, ++ ++ .MS_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_MassStorage, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 2, ++ ++ .Class = MS_CSCP_MassStorageClass, ++ .SubClass = MS_CSCP_SCSITransparentSubclass, ++ .Protocol = MS_CSCP_BulkOnlyTransportProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .MS_DataInEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = MASS_STORAGE_IN_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = MASS_STORAGE_IO_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++ ++ .MS_DataOutEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = MASS_STORAGE_OUT_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = MASS_STORAGE_IO_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ } ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_String_t PROGMEM LanguageString = USB_STRING_DESCRIPTOR_ARRAY(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"LUFA Mass Storage 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 uint16_t wIndex, ++ const void** const DescriptorAddress) ++{ ++ const uint8_t DescriptorType = (wValue >> 8); ++ const uint8_t DescriptorNumber = (wValue & 0xFF); ++ ++ const void* Address = NULL; ++ uint16_t Size = NO_DESCRIPTOR; ++ ++ switch (DescriptorType) ++ { ++ case DTYPE_Device: ++ Address = &DeviceDescriptor; ++ Size = sizeof(USB_Descriptor_Device_t); ++ break; ++ case DTYPE_Configuration: ++ Address = &ConfigurationDescriptor; ++ Size = sizeof(USB_Descriptor_Configuration_t); ++ break; ++ case DTYPE_String: ++ switch (DescriptorNumber) ++ { ++ case STRING_ID_Language: ++ Address = &LanguageString; ++ Size = pgm_read_byte(&LanguageString.Header.Size); ++ break; ++ case STRING_ID_Manufacturer: ++ Address = &ManufacturerString; ++ Size = pgm_read_byte(&ManufacturerString.Header.Size); ++ break; ++ case STRING_ID_Product: ++ Address = &ProductString; ++ Size = pgm_read_byte(&ProductString.Header.Size); ++ break; ++ } ++ ++ break; ++ } ++ ++ *DescriptorAddress = Address; ++ return Size; ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/MassStorage/Descriptors.h index 000000000,000000000..1124deb64 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/MassStorage/Descriptors.h @@@ -1,0 -1,0 +1,98 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 "Config/AppConfig.h" ++ ++ /* Macros: */ ++ /** Endpoint address of the Mass Storage device-to-host data IN endpoint. */ ++ #define MASS_STORAGE_IN_EPADDR (ENDPOINT_DIR_IN | 3) ++ ++ /** Endpoint address of the Mass Storage host-to-device data OUT endpoint. */ ++ #define MASS_STORAGE_OUT_EPADDR (ENDPOINT_DIR_OUT | 4) ++ ++ /** Size in bytes of the Mass Storage data endpoints. */ ++ #define MASS_STORAGE_IO_EPSIZE 64 ++ ++ /* 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; ++ ++ // Mass Storage Interface ++ USB_Descriptor_Interface_t MS_Interface; ++ USB_Descriptor_Endpoint_t MS_DataInEndpoint; ++ USB_Descriptor_Endpoint_t MS_DataOutEndpoint; ++ } USB_Descriptor_Configuration_t; ++ ++ /** Enum for the device interface descriptor IDs within the device. Each interface descriptor ++ * should have a unique ID index associated with it, which can be used to refer to the ++ * interface from other descriptors. ++ */ ++ enum InterfaceDescriptors_t ++ { ++ INTERFACE_ID_MassStorage = 0, /**< Mass storage interface descriptor ID */ ++ }; ++ ++ /** Enum for the device string descriptor IDs within the device. Each string descriptor should ++ * have a unique ID index associated with it, which can be used to refer to the string from ++ * other descriptors. ++ */ ++ enum StringDescriptors_t ++ { ++ STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */ ++ STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */ ++ STRING_ID_Product = 2, /**< Product string ID */ ++ }; ++ ++ /* Function Prototypes: */ ++ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ++ const uint16_t wIndex, ++ const void** const DescriptorAddress) ++ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/MassStorage/Lib/DataflashManager.c index 000000000,000000000..c0fd16ccc new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/MassStorage/Lib/DataflashManager.c @@@ -1,0 -1,0 +1,534 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * Functions to manage the physical Dataflash media, including reading and writing of ++ * blocks of data. These functions are called by the SCSI layer when data must be stored ++ * or retrieved to/from the physical storage media. If a different media is used (such ++ * as a SD card or EEPROM), functions similar to these will need to be generated. ++ */ ++ ++#define INCLUDE_FROM_DATAFLASHMANAGER_C ++#include "DataflashManager.h" ++ ++/** Writes blocks (OS blocks, not Dataflash pages) to the storage medium, the board Dataflash IC(s), from ++ * the pre-selected data OUT endpoint. This routine reads in OS sized blocks from the endpoint and writes ++ * them to the Dataflash in Dataflash page sized blocks. ++ * ++ * \param[in] MSInterfaceInfo Pointer to a structure containing a Mass Storage Class configuration and state ++ * \param[in] BlockAddress Data block starting address for the write sequence ++ * \param[in] TotalBlocks Number of blocks of data to write ++ */ ++void DataflashManager_WriteBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo, ++ const uint32_t BlockAddress, ++ uint16_t TotalBlocks) ++{ ++ uint16_t CurrDFPage = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE); ++ uint16_t CurrDFPageByte = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE); ++ uint8_t CurrDFPageByteDiv16 = (CurrDFPageByte >> 4); ++ bool UsingSecondBuffer = false; ++ ++ /* Select the correct starting Dataflash IC for the block requested */ ++ Dataflash_SelectChipFromPage(CurrDFPage); ++ ++#if (DATAFLASH_PAGE_SIZE > VIRTUAL_MEMORY_BLOCK_SIZE) ++ /* Copy selected dataflash's current page contents to the Dataflash buffer */ ++ Dataflash_SendByte(DF_CMD_MAINMEMTOBUFF1); ++ Dataflash_SendAddressBytes(CurrDFPage, 0); ++ Dataflash_WaitWhileBusy(); ++#endif ++ ++ /* Send the Dataflash buffer write command */ ++ Dataflash_SendByte(DF_CMD_BUFF1WRITE); ++ Dataflash_SendAddressBytes(0, CurrDFPageByte); ++ ++ /* Wait until endpoint is ready before continuing */ ++ if (Endpoint_WaitUntilReady()) ++ return; ++ ++ while (TotalBlocks) ++ { ++ uint8_t BytesInBlockDiv16 = 0; ++ ++ /* Write an endpoint packet sized data block to the Dataflash */ ++ while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4)) ++ { ++ /* Check if the endpoint is currently empty */ ++ if (!(Endpoint_IsReadWriteAllowed())) ++ { ++ /* Clear the current endpoint bank */ ++ Endpoint_ClearOUT(); ++ ++ /* Wait until the host has sent another packet */ ++ if (Endpoint_WaitUntilReady()) ++ return; ++ } ++ ++ /* Check if end of Dataflash page reached */ ++ if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4)) ++ { ++ /* Write the Dataflash buffer contents back to the Dataflash page */ ++ Dataflash_WaitWhileBusy(); ++ Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_BUFF2TOMAINMEMWITHERASE : DF_CMD_BUFF1TOMAINMEMWITHERASE); ++ Dataflash_SendAddressBytes(CurrDFPage, 0); ++ ++ /* Reset the Dataflash buffer counter, increment the page counter */ ++ CurrDFPageByteDiv16 = 0; ++ CurrDFPage++; ++ ++ /* Once all the Dataflash ICs have had their first buffers filled, switch buffers to maintain throughput */ ++ if (Dataflash_GetSelectedChip() == DATAFLASH_CHIP_MASK(DATAFLASH_TOTALCHIPS)) ++ UsingSecondBuffer = !(UsingSecondBuffer); ++ ++ /* Select the next Dataflash chip based on the new Dataflash page index */ ++ Dataflash_SelectChipFromPage(CurrDFPage); ++ ++#if (DATAFLASH_PAGE_SIZE > VIRTUAL_MEMORY_BLOCK_SIZE) ++ /* If less than one Dataflash page remaining, copy over the existing page to preserve trailing data */ ++ if ((TotalBlocks * (VIRTUAL_MEMORY_BLOCK_SIZE >> 4)) < (DATAFLASH_PAGE_SIZE >> 4)) ++ { ++ /* Copy selected dataflash's current page contents to the Dataflash buffer */ ++ Dataflash_WaitWhileBusy(); ++ Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_MAINMEMTOBUFF2 : DF_CMD_MAINMEMTOBUFF1); ++ Dataflash_SendAddressBytes(CurrDFPage, 0); ++ Dataflash_WaitWhileBusy(); ++ } ++#endif ++ ++ /* Send the Dataflash buffer write command */ ++ Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_BUFF2WRITE : DF_CMD_BUFF1WRITE); ++ Dataflash_SendAddressBytes(0, 0); ++ } ++ ++ /* Write one 16-byte chunk of data to the Dataflash */ ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ ++ /* Increment the Dataflash page 16 byte block counter */ ++ CurrDFPageByteDiv16++; ++ ++ /* Increment the block 16 byte block counter */ ++ BytesInBlockDiv16++; ++ ++ /* Check if the current command is being aborted by the host */ ++ if (MSInterfaceInfo->State.IsMassStoreReset) ++ return; ++ } ++ ++ /* Decrement the blocks remaining counter */ ++ TotalBlocks--; ++ } ++ ++ /* Write the Dataflash buffer contents back to the Dataflash page */ ++ Dataflash_WaitWhileBusy(); ++ Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_BUFF2TOMAINMEMWITHERASE : DF_CMD_BUFF1TOMAINMEMWITHERASE); ++ Dataflash_SendAddressBytes(CurrDFPage, 0x00); ++ Dataflash_WaitWhileBusy(); ++ ++ /* If the endpoint is empty, clear it ready for the next packet from the host */ ++ if (!(Endpoint_IsReadWriteAllowed())) ++ Endpoint_ClearOUT(); ++ ++ /* Deselect all Dataflash chips */ ++ Dataflash_DeselectChip(); ++} ++ ++/** Reads blocks (OS blocks, not Dataflash pages) from the storage medium, the board Dataflash IC(s), into ++ * the pre-selected data IN endpoint. This routine reads in Dataflash page sized blocks from the Dataflash ++ * and writes them in OS sized blocks to the endpoint. ++ * ++ * \param[in] MSInterfaceInfo Pointer to a structure containing a Mass Storage Class configuration and state ++ * \param[in] BlockAddress Data block starting address for the read sequence ++ * \param[in] TotalBlocks Number of blocks of data to read ++ */ ++void DataflashManager_ReadBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo, ++ const uint32_t BlockAddress, ++ uint16_t TotalBlocks) ++{ ++ uint16_t CurrDFPage = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE); ++ uint16_t CurrDFPageByte = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE); ++ uint8_t CurrDFPageByteDiv16 = (CurrDFPageByte >> 4); ++ ++ /* Select the correct starting Dataflash IC for the block requested */ ++ Dataflash_SelectChipFromPage(CurrDFPage); ++ ++ /* Send the Dataflash main memory page read command */ ++ Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD); ++ Dataflash_SendAddressBytes(CurrDFPage, CurrDFPageByte); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ ++ /* Wait until endpoint is ready before continuing */ ++ if (Endpoint_WaitUntilReady()) ++ return; ++ ++ while (TotalBlocks) ++ { ++ uint8_t BytesInBlockDiv16 = 0; ++ ++ /* Read an endpoint packet sized data block from the Dataflash */ ++ while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4)) ++ { ++ /* Check if the endpoint is currently full */ ++ if (!(Endpoint_IsReadWriteAllowed())) ++ { ++ /* Clear the endpoint bank to send its contents to the host */ ++ Endpoint_ClearIN(); ++ ++ /* Wait until the endpoint is ready for more data */ ++ if (Endpoint_WaitUntilReady()) ++ return; ++ } ++ ++ /* Check if end of Dataflash page reached */ ++ if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4)) ++ { ++ /* Reset the Dataflash buffer counter, increment the page counter */ ++ CurrDFPageByteDiv16 = 0; ++ CurrDFPage++; ++ ++ /* Select the next Dataflash chip based on the new Dataflash page index */ ++ Dataflash_SelectChipFromPage(CurrDFPage); ++ ++ /* Send the Dataflash main memory page read command */ ++ Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD); ++ Dataflash_SendAddressBytes(CurrDFPage, 0); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ } ++ ++ /* Read one 16-byte chunk of data from the Dataflash */ ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ ++ /* Increment the Dataflash page 16 byte block counter */ ++ CurrDFPageByteDiv16++; ++ ++ /* Increment the block 16 byte block counter */ ++ BytesInBlockDiv16++; ++ ++ /* Check if the current command is being aborted by the host */ ++ if (MSInterfaceInfo->State.IsMassStoreReset) ++ return; ++ } ++ ++ /* Decrement the blocks remaining counter */ ++ TotalBlocks--; ++ } ++ ++ /* If the endpoint is full, send its contents to the host */ ++ if (!(Endpoint_IsReadWriteAllowed())) ++ Endpoint_ClearIN(); ++ ++ /* Deselect all Dataflash chips */ ++ Dataflash_DeselectChip(); ++} ++ ++/** Writes blocks (OS blocks, not Dataflash pages) to the storage medium, the board Dataflash IC(s), from ++ * the given RAM buffer. This routine reads in OS sized blocks from the buffer and writes them to the ++ * Dataflash in Dataflash page sized blocks. This can be linked to FAT libraries to write files to the ++ * Dataflash. ++ * ++ * \param[in] BlockAddress Data block starting address for the write sequence ++ * \param[in] TotalBlocks Number of blocks of data to write ++ * \param[in] BufferPtr Pointer to the data source RAM buffer ++ */ ++void DataflashManager_WriteBlocks_RAM(const uint32_t BlockAddress, ++ uint16_t TotalBlocks, ++ uint8_t* BufferPtr) ++{ ++ uint16_t CurrDFPage = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE); ++ uint16_t CurrDFPageByte = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE); ++ uint8_t CurrDFPageByteDiv16 = (CurrDFPageByte >> 4); ++ bool UsingSecondBuffer = false; ++ ++ /* Select the correct starting Dataflash IC for the block requested */ ++ Dataflash_SelectChipFromPage(CurrDFPage); ++ ++#if (DATAFLASH_PAGE_SIZE > VIRTUAL_MEMORY_BLOCK_SIZE) ++ /* Copy selected dataflash's current page contents to the Dataflash buffer */ ++ Dataflash_SendByte(DF_CMD_MAINMEMTOBUFF1); ++ Dataflash_SendAddressBytes(CurrDFPage, 0); ++ Dataflash_WaitWhileBusy(); ++#endif ++ ++ /* Send the Dataflash buffer write command */ ++ Dataflash_SendByte(DF_CMD_BUFF1WRITE); ++ Dataflash_SendAddressBytes(0, CurrDFPageByte); ++ ++ while (TotalBlocks) ++ { ++ uint8_t BytesInBlockDiv16 = 0; ++ ++ /* Write an endpoint packet sized data block to the Dataflash */ ++ while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4)) ++ { ++ /* Check if end of Dataflash page reached */ ++ if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4)) ++ { ++ /* Write the Dataflash buffer contents back to the Dataflash page */ ++ Dataflash_WaitWhileBusy(); ++ Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_BUFF2TOMAINMEMWITHERASE : DF_CMD_BUFF1TOMAINMEMWITHERASE); ++ Dataflash_SendAddressBytes(CurrDFPage, 0); ++ ++ /* Reset the Dataflash buffer counter, increment the page counter */ ++ CurrDFPageByteDiv16 = 0; ++ CurrDFPage++; ++ ++ /* Once all the Dataflash ICs have had their first buffers filled, switch buffers to maintain throughput */ ++ if (Dataflash_GetSelectedChip() == DATAFLASH_CHIP_MASK(DATAFLASH_TOTALCHIPS)) ++ UsingSecondBuffer = !(UsingSecondBuffer); ++ ++ /* Select the next Dataflash chip based on the new Dataflash page index */ ++ Dataflash_SelectChipFromPage(CurrDFPage); ++ ++#if (DATAFLASH_PAGE_SIZE > VIRTUAL_MEMORY_BLOCK_SIZE) ++ /* If less than one Dataflash page remaining, copy over the existing page to preserve trailing data */ ++ if ((TotalBlocks * (VIRTUAL_MEMORY_BLOCK_SIZE >> 4)) < (DATAFLASH_PAGE_SIZE >> 4)) ++ { ++ /* Copy selected dataflash's current page contents to the Dataflash buffer */ ++ Dataflash_WaitWhileBusy(); ++ Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_MAINMEMTOBUFF2 : DF_CMD_MAINMEMTOBUFF1); ++ Dataflash_SendAddressBytes(CurrDFPage, 0); ++ Dataflash_WaitWhileBusy(); ++ } ++#endif ++ ++ /* Send the Dataflash buffer write command */ ++ Dataflash_ToggleSelectedChipCS(); ++ Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_BUFF2WRITE : DF_CMD_BUFF1WRITE); ++ Dataflash_SendAddressBytes(0, 0); ++ } ++ ++ /* Write one 16-byte chunk of data to the Dataflash */ ++ for (uint8_t ByteNum = 0; ByteNum < 16; ByteNum++) ++ Dataflash_SendByte(*(BufferPtr++)); ++ ++ /* Increment the Dataflash page 16 byte block counter */ ++ CurrDFPageByteDiv16++; ++ ++ /* Increment the block 16 byte block counter */ ++ BytesInBlockDiv16++; ++ } ++ ++ /* Decrement the blocks remaining counter */ ++ TotalBlocks--; ++ } ++ ++ /* Write the Dataflash buffer contents back to the Dataflash page */ ++ Dataflash_WaitWhileBusy(); ++ Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_BUFF2TOMAINMEMWITHERASE : DF_CMD_BUFF1TOMAINMEMWITHERASE); ++ Dataflash_SendAddressBytes(CurrDFPage, 0x00); ++ Dataflash_WaitWhileBusy(); ++ ++ /* Deselect all Dataflash chips */ ++ Dataflash_DeselectChip(); ++} ++ ++/** Reads blocks (OS blocks, not Dataflash pages) from the storage medium, the board Dataflash IC(s), into ++ * the preallocated RAM buffer. This routine reads in Dataflash page sized blocks from the Dataflash ++ * and writes them in OS sized blocks to the given buffer. This can be linked to FAT libraries to read ++ * the files stored on the Dataflash. ++ * ++ * \param[in] BlockAddress Data block starting address for the read sequence ++ * \param[in] TotalBlocks Number of blocks of data to read ++ * \param[out] BufferPtr Pointer to the data destination RAM buffer ++ */ ++void DataflashManager_ReadBlocks_RAM(const uint32_t BlockAddress, ++ uint16_t TotalBlocks, ++ uint8_t* BufferPtr) ++{ ++ uint16_t CurrDFPage = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE); ++ uint16_t CurrDFPageByte = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE); ++ uint8_t CurrDFPageByteDiv16 = (CurrDFPageByte >> 4); ++ ++ /* Select the correct starting Dataflash IC for the block requested */ ++ Dataflash_SelectChipFromPage(CurrDFPage); ++ ++ /* Send the Dataflash main memory page read command */ ++ Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD); ++ Dataflash_SendAddressBytes(CurrDFPage, CurrDFPageByte); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ ++ while (TotalBlocks) ++ { ++ uint8_t BytesInBlockDiv16 = 0; ++ ++ /* Read an endpoint packet sized data block from the Dataflash */ ++ while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4)) ++ { ++ /* Check if end of Dataflash page reached */ ++ if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4)) ++ { ++ /* Reset the Dataflash buffer counter, increment the page counter */ ++ CurrDFPageByteDiv16 = 0; ++ CurrDFPage++; ++ ++ /* Select the next Dataflash chip based on the new Dataflash page index */ ++ Dataflash_SelectChipFromPage(CurrDFPage); ++ ++ /* Send the Dataflash main memory page read command */ ++ Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD); ++ Dataflash_SendAddressBytes(CurrDFPage, 0); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ } ++ ++ /* Read one 16-byte chunk of data from the Dataflash */ ++ for (uint8_t ByteNum = 0; ByteNum < 16; ByteNum++) ++ *(BufferPtr++) = Dataflash_ReceiveByte(); ++ ++ /* Increment the Dataflash page 16 byte block counter */ ++ CurrDFPageByteDiv16++; ++ ++ /* Increment the block 16 byte block counter */ ++ BytesInBlockDiv16++; ++ } ++ ++ /* Decrement the blocks remaining counter */ ++ TotalBlocks--; ++ } ++ ++ /* Deselect all Dataflash chips */ ++ Dataflash_DeselectChip(); ++} ++ ++/** Disables the Dataflash memory write protection bits on the board Dataflash ICs, if enabled. */ ++void DataflashManager_ResetDataflashProtections(void) ++{ ++ /* Select first Dataflash chip, send the read status register command */ ++ Dataflash_SelectChip(DATAFLASH_CHIP1); ++ Dataflash_SendByte(DF_CMD_GETSTATUS); ++ ++ /* Check if sector protection is enabled */ ++ if (Dataflash_ReceiveByte() & DF_STATUS_SECTORPROTECTION_ON) ++ { ++ Dataflash_ToggleSelectedChipCS(); ++ ++ /* Send the commands to disable sector protection */ ++ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[0]); ++ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[1]); ++ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[2]); ++ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[3]); ++ } ++ ++ /* Select second Dataflash chip (if present on selected board), send read status register command */ ++ #if (DATAFLASH_TOTALCHIPS == 2) ++ Dataflash_SelectChip(DATAFLASH_CHIP2); ++ Dataflash_SendByte(DF_CMD_GETSTATUS); ++ ++ /* Check if sector protection is enabled */ ++ if (Dataflash_ReceiveByte() & DF_STATUS_SECTORPROTECTION_ON) ++ { ++ Dataflash_ToggleSelectedChipCS(); ++ ++ /* Send the commands to disable sector protection */ ++ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[0]); ++ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[1]); ++ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[2]); ++ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[3]); ++ } ++ #endif ++ ++ /* Deselect current Dataflash chip */ ++ Dataflash_DeselectChip(); ++} ++ ++/** Performs a simple test on the attached Dataflash IC(s) to ensure that they are working. ++ * ++ * \return Boolean \c true if all media chips are working, \c false otherwise ++ */ ++bool DataflashManager_CheckDataflashOperation(void) ++{ ++ uint8_t ReturnByte; ++ ++ /* Test first Dataflash IC is present and responding to commands */ ++ Dataflash_SelectChip(DATAFLASH_CHIP1); ++ Dataflash_SendByte(DF_CMD_READMANUFACTURERDEVICEINFO); ++ ReturnByte = Dataflash_ReceiveByte(); ++ Dataflash_DeselectChip(); ++ ++ /* If returned data is invalid, fail the command */ ++ if (ReturnByte != DF_MANUFACTURER_ATMEL) ++ return false; ++ ++ #if (DATAFLASH_TOTALCHIPS == 2) ++ /* Test second Dataflash IC is present and responding to commands */ ++ Dataflash_SelectChip(DATAFLASH_CHIP2); ++ Dataflash_SendByte(DF_CMD_READMANUFACTURERDEVICEINFO); ++ ReturnByte = Dataflash_ReceiveByte(); ++ Dataflash_DeselectChip(); ++ ++ /* If returned data is invalid, fail the command */ ++ if (ReturnByte != DF_MANUFACTURER_ATMEL) ++ return false; ++ #endif ++ ++ return true; ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/MassStorage/Lib/DataflashManager.h index 000000000,000000000..b33f3f46d new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/MassStorage/Lib/DataflashManager.h @@@ -1,0 -1,0 +1,89 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 DataflashManager.c. ++ */ ++ ++#ifndef _DATAFLASH_MANAGER_H_ ++#define _DATAFLASH_MANAGER_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ ++ #include "../MassStorage.h" ++ #include "../Descriptors.h" ++ #include "Config/AppConfig.h" ++ ++ #include <LUFA/Common/Common.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Drivers/Board/Dataflash.h> ++ ++ /* Preprocessor Checks: */ ++ #if (DATAFLASH_PAGE_SIZE % 16) ++ #error Dataflash page size must be a multiple of 16 bytes. ++ #endif ++ ++ /* Defines: */ ++ /** Total number of bytes of the storage medium, comprised of one or more Dataflash ICs. */ ++ #define VIRTUAL_MEMORY_BYTES ((uint32_t)DATAFLASH_PAGES * DATAFLASH_PAGE_SIZE * DATAFLASH_TOTALCHIPS) ++ ++ /** Block size of the device. This is kept at 512 to remain compatible with the OS despite the underlying ++ * storage media (Dataflash) using a different native block size. Do not change this value. ++ */ ++ #define VIRTUAL_MEMORY_BLOCK_SIZE 512 ++ ++ /** Total number of blocks of the virtual memory for reporting to the host as the device's total capacity. Do not ++ * change this value; change VIRTUAL_MEMORY_BYTES instead to alter the media size. ++ */ ++ #define VIRTUAL_MEMORY_BLOCKS (VIRTUAL_MEMORY_BYTES / VIRTUAL_MEMORY_BLOCK_SIZE) ++ ++ /** Blocks in each LUN, calculated from the total capacity divided by the total number of Logical Units in the device. */ ++ #define LUN_MEDIA_BLOCKS (VIRTUAL_MEMORY_BLOCKS / TOTAL_LUNS) ++ ++ /* Function Prototypes: */ ++ void DataflashManager_WriteBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo, ++ const uint32_t BlockAddress, ++ uint16_t TotalBlocks); ++ void DataflashManager_ReadBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo, ++ const uint32_t BlockAddress, ++ uint16_t TotalBlocks); ++ void DataflashManager_WriteBlocks_RAM(const uint32_t BlockAddress, ++ uint16_t TotalBlocks, ++ uint8_t* BufferPtr) ATTR_NON_NULL_PTR_ARG(3); ++ void DataflashManager_ReadBlocks_RAM(const uint32_t BlockAddress, ++ uint16_t TotalBlocks, ++ uint8_t* BufferPtr) ATTR_NON_NULL_PTR_ARG(3); ++ void DataflashManager_ResetDataflashProtections(void); ++ bool DataflashManager_CheckDataflashOperation(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/MassStorage/Lib/SCSI.c index 000000000,000000000..8780d1603 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/MassStorage/Lib/SCSI.c @@@ -1,0 -1,0 +1,349 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * SCSI command processing routines, for SCSI commands issued by the host. Mass Storage ++ * devices use a thin "Bulk-Only Transport" protocol for issuing commands and status information, ++ * which wrap around standard SCSI device commands for controlling the actual storage medium. ++ */ ++ ++#define INCLUDE_FROM_SCSI_C ++#include "SCSI.h" ++ ++/** Structure to hold the SCSI response data to a SCSI INQUIRY command. This gives information about the device's ++ * features and capabilities. ++ */ ++static const SCSI_Inquiry_Response_t InquiryData = ++ { ++ .DeviceType = DEVICE_TYPE_BLOCK, ++ .PeripheralQualifier = 0, ++ ++ .Removable = true, ++ ++ .Version = 0, ++ ++ .ResponseDataFormat = 2, ++ .NormACA = false, ++ .TrmTsk = false, ++ .AERC = false, ++ ++ .AdditionalLength = 0x1F, ++ ++ .SoftReset = false, ++ .CmdQue = false, ++ .Linked = false, ++ .Sync = false, ++ .WideBus16Bit = false, ++ .WideBus32Bit = false, ++ .RelAddr = false, ++ ++ .VendorID = "LUFA", ++ .ProductID = "Dataflash Disk", ++ .RevisionID = {'0','.','0','0'}, ++ }; ++ ++/** Structure to hold the sense data for the last issued SCSI command, which is returned to the host after a SCSI REQUEST SENSE ++ * command is issued. This gives information on exactly why the last command failed to complete. ++ */ ++static SCSI_Request_Sense_Response_t SenseData = ++ { ++ .ResponseCode = 0x70, ++ .AdditionalLength = 0x0A, ++ }; ++ ++ ++/** Main routine to process the SCSI command located in the Command Block Wrapper read from the host. This dispatches ++ * to the appropriate SCSI command handling routine if the issued command is supported by the device, else it returns ++ * a command failure due to a ILLEGAL REQUEST. ++ * ++ * \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with ++ * ++ * \return Boolean \c true if the command completed successfully, \c false otherwise ++ */ ++bool SCSI_DecodeSCSICommand(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) ++{ ++ bool CommandSuccess = false; ++ ++ /* Run the appropriate SCSI command hander function based on the passed command */ ++ switch (MSInterfaceInfo->State.CommandBlock.SCSICommandData[0]) ++ { ++ case SCSI_CMD_INQUIRY: ++ CommandSuccess = SCSI_Command_Inquiry(MSInterfaceInfo); ++ break; ++ case SCSI_CMD_REQUEST_SENSE: ++ CommandSuccess = SCSI_Command_Request_Sense(MSInterfaceInfo); ++ break; ++ case SCSI_CMD_READ_CAPACITY_10: ++ CommandSuccess = SCSI_Command_Read_Capacity_10(MSInterfaceInfo); ++ break; ++ case SCSI_CMD_SEND_DIAGNOSTIC: ++ CommandSuccess = SCSI_Command_Send_Diagnostic(MSInterfaceInfo); ++ break; ++ case SCSI_CMD_WRITE_10: ++ CommandSuccess = SCSI_Command_ReadWrite_10(MSInterfaceInfo, DATA_WRITE); ++ break; ++ case SCSI_CMD_READ_10: ++ CommandSuccess = SCSI_Command_ReadWrite_10(MSInterfaceInfo, DATA_READ); ++ break; ++ case SCSI_CMD_MODE_SENSE_6: ++ CommandSuccess = SCSI_Command_ModeSense_6(MSInterfaceInfo); ++ break; ++ case SCSI_CMD_START_STOP_UNIT: ++ case SCSI_CMD_TEST_UNIT_READY: ++ case SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL: ++ case SCSI_CMD_VERIFY_10: ++ /* These commands should just succeed, no handling required */ ++ CommandSuccess = true; ++ MSInterfaceInfo->State.CommandBlock.DataTransferLength = 0; ++ break; ++ default: ++ /* Update the SENSE key to reflect the invalid command */ ++ SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST, ++ SCSI_ASENSE_INVALID_COMMAND, ++ SCSI_ASENSEQ_NO_QUALIFIER); ++ break; ++ } ++ ++ /* Check if command was successfully processed */ ++ if (CommandSuccess) ++ { ++ SCSI_SET_SENSE(SCSI_SENSE_KEY_GOOD, ++ SCSI_ASENSE_NO_ADDITIONAL_INFORMATION, ++ SCSI_ASENSEQ_NO_QUALIFIER); ++ ++ return true; ++ } ++ ++ return false; ++} ++ ++/** Command processing for an issued SCSI INQUIRY command. This command returns information about the device's features ++ * and capabilities to the host. ++ * ++ * \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with ++ * ++ * \return Boolean \c true if the command completed successfully, \c false otherwise. ++ */ ++static bool SCSI_Command_Inquiry(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) ++{ ++ uint16_t AllocationLength = SwapEndian_16(*(uint16_t*)&MSInterfaceInfo->State.CommandBlock.SCSICommandData[3]); ++ uint16_t BytesTransferred = MIN(AllocationLength, sizeof(InquiryData)); ++ ++ /* Only the standard INQUIRY data is supported, check if any optional INQUIRY bits set */ ++ if ((MSInterfaceInfo->State.CommandBlock.SCSICommandData[1] & ((1 << 0) | (1 << 1))) || ++ MSInterfaceInfo->State.CommandBlock.SCSICommandData[2]) ++ { ++ /* Optional but unsupported bits set - update the SENSE key and fail the request */ ++ SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST, ++ SCSI_ASENSE_INVALID_FIELD_IN_CDB, ++ SCSI_ASENSEQ_NO_QUALIFIER); ++ ++ return false; ++ } ++ ++ Endpoint_Write_Stream_LE(&InquiryData, BytesTransferred, NULL); ++ ++ /* Pad out remaining bytes with 0x00 */ ++ Endpoint_Null_Stream((AllocationLength - BytesTransferred), NULL); ++ ++ /* Finalize the stream transfer to send the last packet */ ++ Endpoint_ClearIN(); ++ ++ /* Succeed the command and update the bytes transferred counter */ ++ MSInterfaceInfo->State.CommandBlock.DataTransferLength -= BytesTransferred; ++ ++ return true; ++} ++ ++/** Command processing for an issued SCSI REQUEST SENSE command. This command returns information about the last issued command, ++ * including the error code and additional error information so that the host can determine why a command failed to complete. ++ * ++ * \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with ++ * ++ * \return Boolean \c true if the command completed successfully, \c false otherwise. ++ */ ++static bool SCSI_Command_Request_Sense(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) ++{ ++ uint8_t AllocationLength = MSInterfaceInfo->State.CommandBlock.SCSICommandData[4]; ++ uint8_t BytesTransferred = MIN(AllocationLength, sizeof(SenseData)); ++ ++ Endpoint_Write_Stream_LE(&SenseData, BytesTransferred, NULL); ++ Endpoint_Null_Stream((AllocationLength - BytesTransferred), NULL); ++ Endpoint_ClearIN(); ++ ++ /* Succeed the command and update the bytes transferred counter */ ++ MSInterfaceInfo->State.CommandBlock.DataTransferLength -= BytesTransferred; ++ ++ return true; ++} ++ ++/** Command processing for an issued SCSI READ CAPACITY (10) command. This command returns information about the device's capacity ++ * on the selected Logical Unit (drive), as a number of OS-sized blocks. ++ * ++ * \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with ++ * ++ * \return Boolean \c true if the command completed successfully, \c false otherwise. ++ */ ++static bool SCSI_Command_Read_Capacity_10(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) ++{ ++ uint32_t LastBlockAddressInLUN = (LUN_MEDIA_BLOCKS - 1); ++ uint32_t MediaBlockSize = VIRTUAL_MEMORY_BLOCK_SIZE; ++ ++ Endpoint_Write_Stream_BE(&LastBlockAddressInLUN, sizeof(LastBlockAddressInLUN), NULL); ++ Endpoint_Write_Stream_BE(&MediaBlockSize, sizeof(MediaBlockSize), NULL); ++ Endpoint_ClearIN(); ++ ++ /* Succeed the command and update the bytes transferred counter */ ++ MSInterfaceInfo->State.CommandBlock.DataTransferLength -= 8; ++ ++ return true; ++} ++ ++/** Command processing for an issued SCSI SEND DIAGNOSTIC command. This command performs a quick check of the Dataflash ICs on the ++ * board, and indicates if they are present and functioning correctly. Only the Self-Test portion of the diagnostic command is ++ * supported. ++ * ++ * \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with ++ * ++ * \return Boolean \c true if the command completed successfully, \c false otherwise. ++ */ ++static bool SCSI_Command_Send_Diagnostic(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) ++{ ++ /* Check to see if the SELF TEST bit is not set */ ++ if (!(MSInterfaceInfo->State.CommandBlock.SCSICommandData[1] & (1 << 2))) ++ { ++ /* Only self-test supported - update SENSE key and fail the command */ ++ SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST, ++ SCSI_ASENSE_INVALID_FIELD_IN_CDB, ++ SCSI_ASENSEQ_NO_QUALIFIER); ++ ++ return false; ++ } ++ ++ /* Check to see if all attached Dataflash ICs are functional */ ++ if (!(DataflashManager_CheckDataflashOperation())) ++ { ++ /* Update SENSE key with a hardware error condition and return command fail */ ++ SCSI_SET_SENSE(SCSI_SENSE_KEY_HARDWARE_ERROR, ++ SCSI_ASENSE_NO_ADDITIONAL_INFORMATION, ++ SCSI_ASENSEQ_NO_QUALIFIER); ++ ++ return false; ++ } ++ ++ /* Succeed the command and update the bytes transferred counter */ ++ MSInterfaceInfo->State.CommandBlock.DataTransferLength = 0; ++ ++ return true; ++} ++ ++/** Command processing for an issued SCSI READ (10) or WRITE (10) command. This command reads in the block start address ++ * and total number of blocks to process, then calls the appropriate low-level Dataflash routine to handle the actual ++ * reading and writing of the data. ++ * ++ * \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with ++ * \param[in] IsDataRead Indicates if the command is a READ (10) command or WRITE (10) command (DATA_READ or DATA_WRITE) ++ * ++ * \return Boolean \c true if the command completed successfully, \c false otherwise. ++ */ ++static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo, ++ const bool IsDataRead) ++{ ++ uint32_t BlockAddress; ++ uint16_t TotalBlocks; ++ ++ /* Check if the disk is write protected or not */ ++ if ((IsDataRead == DATA_WRITE) && DISK_READ_ONLY) ++ { ++ /* Block address is invalid, update SENSE key and return command fail */ ++ SCSI_SET_SENSE(SCSI_SENSE_KEY_DATA_PROTECT, ++ SCSI_ASENSE_WRITE_PROTECTED, ++ SCSI_ASENSEQ_NO_QUALIFIER); ++ ++ return false; ++ } ++ ++ /* Load in the 32-bit block address (SCSI uses big-endian, so have to reverse the byte order) */ ++ BlockAddress = SwapEndian_32(*(uint32_t*)&MSInterfaceInfo->State.CommandBlock.SCSICommandData[2]); ++ ++ /* Load in the 16-bit total blocks (SCSI uses big-endian, so have to reverse the byte order) */ ++ TotalBlocks = SwapEndian_16(*(uint16_t*)&MSInterfaceInfo->State.CommandBlock.SCSICommandData[7]); ++ ++ /* Check if the block address is outside the maximum allowable value for the LUN */ ++ if (BlockAddress >= LUN_MEDIA_BLOCKS) ++ { ++ /* Block address is invalid, update SENSE key and return command fail */ ++ SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST, ++ SCSI_ASENSE_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE, ++ SCSI_ASENSEQ_NO_QUALIFIER); ++ ++ return false; ++ } ++ ++ #if (TOTAL_LUNS > 1) ++ /* Adjust the given block address to the real media address based on the selected LUN */ ++ BlockAddress += ((uint32_t)MSInterfaceInfo->State.CommandBlock.LUN * LUN_MEDIA_BLOCKS); ++ #endif ++ ++ /* Determine if the packet is a READ (10) or WRITE (10) command, call appropriate function */ ++ if (IsDataRead == DATA_READ) ++ DataflashManager_ReadBlocks(MSInterfaceInfo, BlockAddress, TotalBlocks); ++ else ++ DataflashManager_WriteBlocks(MSInterfaceInfo, BlockAddress, TotalBlocks); ++ ++ /* Update the bytes transferred counter and succeed the command */ ++ MSInterfaceInfo->State.CommandBlock.DataTransferLength -= ((uint32_t)TotalBlocks * VIRTUAL_MEMORY_BLOCK_SIZE); ++ ++ return true; ++} ++ ++/** Command processing for an issued SCSI MODE SENSE (6) command. This command returns various informational pages about ++ * the SCSI device, as well as the device's Write Protect status. ++ * ++ * \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with ++ * ++ * \return Boolean \c true if the command completed successfully, \c false otherwise. ++ */ ++static bool SCSI_Command_ModeSense_6(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) ++{ ++ /* Send an empty header response with the Write Protect flag status */ ++ Endpoint_Write_8(0x00); ++ Endpoint_Write_8(0x00); ++ Endpoint_Write_8(DISK_READ_ONLY ? 0x80 : 0x00); ++ Endpoint_Write_8(0x00); ++ Endpoint_ClearIN(); ++ ++ /* Update the bytes transferred counter and succeed the command */ ++ MSInterfaceInfo->State.CommandBlock.DataTransferLength -= 4; ++ ++ return true; ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/MassStorage/Lib/SCSI.h index 000000000,000000000..16eb78aa1 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/MassStorage/Lib/SCSI.h @@@ -1,0 -1,0 +1,89 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 SCSI.c. ++ */ ++ ++#ifndef _SCSI_H_ ++#define _SCSI_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/pgmspace.h> ++ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include "../MassStorage.h" ++ #include "../Descriptors.h" ++ #include "DataflashManager.h" ++ #include "Config/AppConfig.h" ++ ++ /* Macros: */ ++ /** Macro to set the current SCSI sense data to the given key, additional sense code and additional sense qualifier. This ++ * is for convenience, as it allows for all three sense values (returned upon request to the host to give information about ++ * the last command failure) in a quick and easy manner. ++ * ++ * \param[in] Key New SCSI sense key to set the sense code to ++ * \param[in] Acode New SCSI additional sense key to set the additional sense code to ++ * \param[in] Aqual New SCSI additional sense key qualifier to set the additional sense qualifier code to ++ */ ++ #define SCSI_SET_SENSE(Key, Acode, Aqual) do { SenseData.SenseKey = (Key); \ ++ SenseData.AdditionalSenseCode = (Acode); \ ++ SenseData.AdditionalSenseQualifier = (Aqual); } while (0) ++ ++ /** Macro for the \ref SCSI_Command_ReadWrite_10() function, to indicate that data is to be read from the storage medium. */ ++ #define DATA_READ true ++ ++ /** Macro for the \ref SCSI_Command_ReadWrite_10() function, to indicate that data is to be written to the storage medium. */ ++ #define DATA_WRITE false ++ ++ /** Value for the DeviceType entry in the SCSI_Inquiry_Response_t enum, indicating a Block Media device. */ ++ #define DEVICE_TYPE_BLOCK 0x00 ++ ++ /** Value for the DeviceType entry in the SCSI_Inquiry_Response_t enum, indicating a CD-ROM device. */ ++ #define DEVICE_TYPE_CDROM 0x05 ++ ++ /* Function Prototypes: */ ++ bool SCSI_DecodeSCSICommand(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo); ++ ++ #if defined(INCLUDE_FROM_SCSI_C) ++ static bool SCSI_Command_Inquiry(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo); ++ static bool SCSI_Command_Request_Sense(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo); ++ static bool SCSI_Command_Read_Capacity_10(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo); ++ static bool SCSI_Command_Send_Diagnostic(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo); ++ static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo, ++ const bool IsDataRead); ++ static bool SCSI_Command_ModeSense_6(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo); ++ #endif ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/MassStorage/MassStorage.c index 000000000,000000000..7cf8a3e5d new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/MassStorage/MassStorage.c @@@ -1,0 -1,0 +1,162 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 MassStorage demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "MassStorage.h" ++ ++/** LUFA Mass Storage Class driver interface configuration and state information. This structure is ++ * passed to all Mass Storage Class driver functions, so that multiple instances of the same class ++ * within a device can be differentiated from one another. ++ */ ++USB_ClassInfo_MS_Device_t Disk_MS_Interface = ++ { ++ .Config = ++ { ++ .InterfaceNumber = INTERFACE_ID_MassStorage, ++ .DataINEndpoint = ++ { ++ .Address = MASS_STORAGE_IN_EPADDR, ++ .Size = MASS_STORAGE_IO_EPSIZE, ++ .Banks = 1, ++ }, ++ .DataOUTEndpoint = ++ { ++ .Address = MASS_STORAGE_OUT_EPADDR, ++ .Size = MASS_STORAGE_IO_EPSIZE, ++ .Banks = 1, ++ }, ++ .TotalLUNs = TOTAL_LUNS, ++ }, ++ }; ++ ++ ++/** 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); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ MS_Device_USBTask(&Disk_MS_Interface); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#elif (ARCH == ARCH_XMEGA) ++ /* Start the PLL to multiply the 2MHz RC oscillator to 32MHz and switch the CPU core to run from it */ ++ XMEGACLK_StartPLL(CLOCK_SRC_INT_RC2MHZ, 2000000, F_CPU); ++ XMEGACLK_SetCPUClockSource(CLOCK_SRC_PLL); ++ ++ /* Start the 32MHz internal RC oscillator and start the DFLL to increase it to 48MHz using the USB SOF as a reference */ ++ XMEGACLK_StartInternalOscillator(CLOCK_SRC_INT_RC32MHZ); ++ XMEGACLK_StartDFLL(CLOCK_SRC_INT_RC32MHZ, DFLL_REF_INT_USBSOF, F_USB); ++ ++ PMIC.CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm; ++#endif ++ ++ /* Hardware Initialization */ ++ LEDs_Init(); ++ Dataflash_Init(); ++ USB_Init(); ++ ++ /* Check if the Dataflash is working, abort if not */ ++ if (!(DataflashManager_CheckDataflashOperation())) ++ { ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ for(;;); ++ } ++ ++ /* Clear Dataflash sector protections, if enabled */ ++ DataflashManager_ResetDataflashProtections(); ++} ++ ++/** 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) ++{ ++ bool ConfigSuccess = true; ++ ++ ConfigSuccess &= MS_Device_ConfigureEndpoints(&Disk_MS_Interface); ++ ++ LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); ++} ++ ++/** Event handler for the library USB Control Request reception event. */ ++void EVENT_USB_Device_ControlRequest(void) ++{ ++ MS_Device_ProcessControlRequest(&Disk_MS_Interface); ++} ++ ++/** Mass Storage class driver callback function the reception of SCSI commands from the host, which must be processed. ++ * ++ * \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface configuration structure being referenced ++ */ ++bool CALLBACK_MS_Device_SCSICommandReceived(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) ++{ ++ bool CommandSuccess; ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_BUSY); ++ CommandSuccess = SCSI_DecodeSCSICommand(MSInterfaceInfo); ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++ ++ return CommandSuccess; ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/MassStorage/MassStorage.h index 000000000,000000000..2d07a2198 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/MassStorage/MassStorage.h @@@ -1,0 -1,0 +1,83 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 MassStorage.c. ++ */ ++ ++#ifndef _MASS_STORAGE_H_ ++#define _MASS_STORAGE_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <string.h> ++ ++ #include "Descriptors.h" ++ ++ #include "Lib/SCSI.h" ++ #include "Lib/DataflashManager.h" ++ #include "Config/AppConfig.h" ++ ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Platform/Platform.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) ++ ++ /** LED mask for the library LED driver, to indicate that the USB interface is busy. */ ++ #define LEDMASK_USB_BUSY LEDS_LED2 ++ ++ /* Function Prototypes: */ ++ void SetupHardware(void); ++ ++ void EVENT_USB_Device_Connect(void); ++ void EVENT_USB_Device_Disconnect(void); ++ void EVENT_USB_Device_ConfigurationChanged(void); ++ void EVENT_USB_Device_ControlRequest(void); ++ ++ bool CALLBACK_MS_Device_SCSICommandReceived(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/MassStorage/MassStorage.txt index 000000000,000000000..5759efa6b new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/MassStorage/MassStorage.txt @@@ -1,0 -1,0 +1,100 @@@ ++/** \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 Mass Storage Device Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * \li Series 6 USB AVRs (AT90USBxxx6) ++ * \li Series 4 USB AVRs (ATMEGAxxU4) ++ * \li Series 2 USB AVRs (AT90USBxx2, ATMEGAxxU2) ++ * \li Series AU XMEGA AVRs (ATXMEGAxxxAxU) ++ * \li Series B XMEGA AVRs (ATXMEGAxxxBx) ++ * \li Series C XMEGA AVRs (ATXMEGAxxxCx) ++ * ++ * \section Sec_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>Mass Storage Device</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>Bulk-Only Transport</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF Mass Storage Standard \n ++ * USB Bulk-Only Transport Standard \n ++ * SCSI Primary Commands Specification \n ++ * SCSI Block Commands Specification</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Mass Storage device demonstration application. This gives a simple ++ * reference application for implementing a USB Mass Storage device using ++ * the basic USB UFI drivers in all modern OSes (i.e. no special drivers ++ * required). ++ * ++ * On start-up the system will automatically enumerate and function as an ++ * external mass storage device which may be formatted and used in the same ++ * manner as commercial USB Mass Storage devices. ++ * ++ * You will need to format the mass storage drive upon first run of this ++ * demonstration - as the device acts only as a data block transport between ++ * the host and the storage media, it does not matter what file system is used, ++ * as the data interpretation is performed by the host and not the USB device. ++ * ++ * This demo is not restricted to only a single LUN (logical disk); by changing ++ * the TOTAL_LUNS value in DataflashManager.h, any number of LUNs can be used ++ * (from 1 to 255), with each LUN being allocated an equal portion of the available ++ * Dataflash memory. ++ * ++ * The USB control endpoint is managed entirely by the library using endpoint ++ * interrupts, as the INTERRUPT_CONTROL_ENDPOINT option is enabled. This allows for ++ * the host to reset the Mass Storage device state during long transfers without ++ * the need for complicated polling logic. ++ * ++ * \section Sec_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> ++ * <th><b>Define Name:</b></th> ++ * <th><b>Location:</b></th> ++ * <th><b>Description:</b></th> ++ * </tr> ++ * <tr> ++ * <td>TOTAL_LUNS</td> ++ * <td>AppConfig.h</td> ++ * <td>Total number of Logical Units (drives) in the device. The total device capacity is shared equally between each drive - ++ * this can be set to any positive non-zero amount.</td> ++ * </tr> ++ * <tr> ++ * <td>DISK_READ_ONLY</td> ++ * <td>AppConfig.h</td> ++ * <td>Configuration define, indicating if the disk should be write protected or not.</td> ++ * </tr> ++ * </table> ++ */ ++ diff --cc lib/lufa/Demos/Device/ClassDriver/MassStorage/asf.xml index 000000000,000000000..6f5a8dc03 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/MassStorage/asf.xml @@@ -1,0 -1,0 +1,67 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Mass Storage Device Demo (Class Driver APIs)" id="lufa.demos.device.class.mass_storage.example.avr8"> ++ <require idref="lufa.demos.device.class.mass_storage"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <project caption="Mass Storage Device Demo (Class Driver APIs)" id="lufa.demos.device.class.mass_storage.example.xmega"> ++ <require idref="lufa.demos.device.class.mass_storage"/> ++ <require idref="lufa.boards.dummy.xmega"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atxmega128a1u"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="32000000UL"/> ++ <build type="define" name="F_USB" value="48000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.device.class.mass_storage" caption="Mass Storage Device Demo (Class Driver APIs)"> ++ <info type="description" value="summary"> ++ Mass Storage device demo, implementing a basic USB storage disk using a Dataflash memory IC. This demo uses the user-friendly USB Class Driver APIs to provide a simple, abstracted interface into the USB stack. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Class Driver APIs"/> ++ <keyword value="USB Device"/> ++ <keyword value="Mass Storage Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="MassStorage.txt"/> ++ ++ <build type="c-source" value="MassStorage.c"/> ++ <build type="c-source" value="Descriptors.c"/> ++ <build type="c-source" value="Lib/DataflashManager.c"/> ++ <build type="c-source" value="Lib/SCSI.c"/> ++ <build type="header-file" value="MassStorage.h"/> ++ <build type="header-file" value="Descriptors.h"/> ++ <build type="header-file" value="Lib/DataflashManager.h"/> ++ <build type="header-file" value="Lib/SCSI.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="module-config" subtype="required-header-file" value="AppConfig.h"/> ++ <build type="header-file" value="Config/AppConfig.h"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ <require idref="lufa.drivers.board.dataflash"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Device/ClassDriver/MassStorage/doxyfile index 000000000,000000000..84c2d3d0b new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/MassStorage/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Mass Storage 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Device/ClassDriver/MassStorage/makefile index 000000000,000000000..3239b24db new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/MassStorage/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = MassStorage ++SRC = $(TARGET).c Descriptors.c Lib/DataflashManager.c Lib/SCSI.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Device/ClassDriver/MassStorageKeyboard/Config/AppConfig.h index 000000000,000000000..b18b2c414 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/MassStorageKeyboard/Config/AppConfig.h @@@ -1,0 -1,0 +1,50 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief Application Configuration Header File ++ * ++ * This is a header file which is be used to configure some of ++ * the application's compile time options, as an alternative to ++ * specifying the compile time constants supplied through a ++ * makefile or build system. ++ * ++ * For information on what each token does, refer to the ++ * \ref Sec_Options section of the application documentation. ++ */ ++ ++#ifndef _APP_CONFIG_H_ ++#define _APP_CONFIG_H_ ++ ++ #define TOTAL_LUNS 1 ++ ++ #define DISK_READ_ONLY false ++ ++#endif diff --cc lib/lufa/Demos/Device/ClassDriver/MassStorageKeyboard/Config/LUFAConfig.h index 000000000,000000000..62549878d new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/MassStorageKeyboard/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,126 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++ #define USB_DEVICE_ONLY ++// #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++ #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #elif (ARCH == ARCH_XMEGA) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_RC32MCLKSRC | USB_OPT_BUSEVENT_PRIHIGH) ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++ #define MAX_ENDPOINT_INDEX 5 ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Device/ClassDriver/MassStorageKeyboard/Descriptors.c index 000000000,000000000..15cbc63b2 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/MassStorageKeyboard/Descriptors.c @@@ -1,0 -1,0 +1,254 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ Copyright 2010 Matthias Hullin (lufa [at] matthias [dot] hullin [dot] net) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special ++ * computer-readable structures which the host requests upon device enumeration, to determine ++ * the device's capabilities and functions. ++ */ ++ ++#include "Descriptors.h" ++ ++ ++/** HID class report descriptor. This is a special descriptor constructed with values from the ++ * USBIF HID class specification to describe the reports and capabilities of the HID device. This ++ * descriptor is parsed by the host and its contents used to determine what data (and in what encoding) ++ * the device will send, and what it may be sent back from the host. Refer to the HID specification for ++ * more details on HID report descriptors. ++ */ ++const USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] = ++{ ++ /* Use the HID class driver's standard Keyboard report. ++ * Max simultaneous keys: 6 ++ */ ++ HID_DESCRIPTOR_KEYBOARD(6) ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = ++{ ++ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, ++ ++ .USBSpecification = VERSION_BCD(1,1,0), ++ .Class = USB_CSCP_NoDeviceClass, ++ .SubClass = USB_CSCP_NoDeviceSubclass, ++ .Protocol = USB_CSCP_NoDeviceProtocol, ++ ++ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, ++ ++ .VendorID = 0x03EB, ++ .ProductID = 0x2061, ++ .ReleaseNumber = VERSION_BCD(0,0,1), ++ ++ .ManufacturerStrIndex = STRING_ID_Manufacturer, ++ .ProductStrIndex = STRING_ID_Product, ++ .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. ++ */ ++const 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 = 2, ++ ++ .ConfigurationNumber = 1, ++ .ConfigurationStrIndex = NO_DESCRIPTOR, ++ ++ .ConfigAttributes = USB_CONFIG_ATTR_RESERVED, ++ ++ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) ++ }, ++ ++ .MS_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_MassStorage, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 2, ++ ++ .Class = MS_CSCP_MassStorageClass, ++ .SubClass = MS_CSCP_SCSITransparentSubclass, ++ .Protocol = MS_CSCP_BulkOnlyTransportProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .MS_DataInEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = MASS_STORAGE_IN_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = MASS_STORAGE_IO_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++ ++ .MS_DataOutEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = MASS_STORAGE_OUT_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = MASS_STORAGE_IO_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++ ++ .HID_KeyboardInterface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_Keyboard, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 1, ++ ++ .Class = HID_CSCP_HIDClass, ++ .SubClass = HID_CSCP_BootSubclass, ++ .Protocol = HID_CSCP_KeyboardBootProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .HID_KeyboardHID = ++ { ++ .Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID}, ++ ++ .HIDSpec = VERSION_BCD(1,1,1), ++ .CountryCode = 0x00, ++ .TotalReportDescriptors = 1, ++ .HIDReportType = HID_DTYPE_Report, ++ .HIDReportLength = sizeof(KeyboardReport) ++ }, ++ ++ .HID_ReportINEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = KEYBOARD_EPADDR, ++ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = KEYBOARD_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_String_t PROGMEM LanguageString = USB_STRING_DESCRIPTOR_ARRAY(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"LUFA Mass Storage and Keyboard 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 uint16_t wIndex, ++ const void** const DescriptorAddress) ++{ ++ const uint8_t DescriptorType = (wValue >> 8); ++ const uint8_t DescriptorNumber = (wValue & 0xFF); ++ ++ const void* Address = NULL; ++ uint16_t Size = NO_DESCRIPTOR; ++ ++ switch (DescriptorType) ++ { ++ case DTYPE_Device: ++ Address = &DeviceDescriptor; ++ Size = sizeof(USB_Descriptor_Device_t); ++ break; ++ case DTYPE_Configuration: ++ Address = &ConfigurationDescriptor; ++ Size = sizeof(USB_Descriptor_Configuration_t); ++ break; ++ case DTYPE_String: ++ switch (DescriptorNumber) ++ { ++ case STRING_ID_Language: ++ Address = &LanguageString; ++ Size = pgm_read_byte(&LanguageString.Header.Size); ++ break; ++ case STRING_ID_Manufacturer: ++ Address = &ManufacturerString; ++ Size = pgm_read_byte(&ManufacturerString.Header.Size); ++ break; ++ case STRING_ID_Product: ++ Address = &ProductString; ++ Size = pgm_read_byte(&ProductString.Header.Size); ++ break; ++ } ++ ++ break; ++ case HID_DTYPE_HID: ++ Address = &ConfigurationDescriptor.HID_KeyboardHID; ++ Size = sizeof(USB_HID_Descriptor_HID_t); ++ break; ++ case HID_DTYPE_Report: ++ Address = &KeyboardReport; ++ Size = sizeof(KeyboardReport); ++ break; ++ } ++ ++ *DescriptorAddress = Address; ++ return Size; ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/MassStorageKeyboard/Descriptors.h index 000000000,000000000..b16e900e4 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/MassStorageKeyboard/Descriptors.h @@@ -1,0 -1,0 +1,111 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ Copyright 2010 Matthias Hullin (lufa [at] matthias [dot] hullin [dot] net) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 "Config/AppConfig.h" ++ ++ /* Macros: */ ++ /** Endpoint address of the Keyboard HID reporting IN endpoint. */ ++ #define KEYBOARD_EPADDR (ENDPOINT_DIR_IN | 1) ++ ++ /** Size in bytes of the Keyboard HID reporting IN endpoint. */ ++ #define KEYBOARD_EPSIZE 8 ++ ++ /** Endpoint address of the Mass Storage device-to-host data IN endpoint. */ ++ #define MASS_STORAGE_IN_EPADDR (ENDPOINT_DIR_IN | 3) ++ ++ /** Endpoint address of the Mass Storage host-to-device data OUT endpoint. */ ++ #define MASS_STORAGE_OUT_EPADDR (ENDPOINT_DIR_OUT | 4) ++ ++ /** Size in bytes of the Mass Storage data endpoints. */ ++ #define MASS_STORAGE_IO_EPSIZE 64 ++ ++ /* 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; ++ ++ // Mass Storage Interface ++ USB_Descriptor_Interface_t MS_Interface; ++ USB_Descriptor_Endpoint_t MS_DataInEndpoint; ++ USB_Descriptor_Endpoint_t MS_DataOutEndpoint; ++ ++ // Generic HID Interface ++ USB_Descriptor_Interface_t HID_KeyboardInterface; ++ USB_HID_Descriptor_HID_t HID_KeyboardHID; ++ USB_Descriptor_Endpoint_t HID_ReportINEndpoint; ++ } USB_Descriptor_Configuration_t; ++ ++ /** Enum for the device interface descriptor IDs within the device. Each interface descriptor ++ * should have a unique ID index associated with it, which can be used to refer to the ++ * interface from other descriptors. ++ */ ++ enum InterfaceDescriptors_t ++ { ++ INTERFACE_ID_MassStorage = 0, /**< Mass storage interface descriptor ID */ ++ INTERFACE_ID_Keyboard = 1, /**< Keyboard interface descriptor ID */ ++ }; ++ ++ /** Enum for the device string descriptor IDs within the device. Each string descriptor should ++ * have a unique ID index associated with it, which can be used to refer to the string from ++ * other descriptors. ++ */ ++ enum StringDescriptors_t ++ { ++ STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */ ++ STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */ ++ STRING_ID_Product = 2, /**< Product string ID */ ++ }; ++ ++ /* Function Prototypes: */ ++ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ++ const uint16_t wIndex, ++ const void** const DescriptorAddress) ++ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/MassStorageKeyboard/Lib/DataflashManager.c index 000000000,000000000..c0fd16ccc new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/MassStorageKeyboard/Lib/DataflashManager.c @@@ -1,0 -1,0 +1,534 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * Functions to manage the physical Dataflash media, including reading and writing of ++ * blocks of data. These functions are called by the SCSI layer when data must be stored ++ * or retrieved to/from the physical storage media. If a different media is used (such ++ * as a SD card or EEPROM), functions similar to these will need to be generated. ++ */ ++ ++#define INCLUDE_FROM_DATAFLASHMANAGER_C ++#include "DataflashManager.h" ++ ++/** Writes blocks (OS blocks, not Dataflash pages) to the storage medium, the board Dataflash IC(s), from ++ * the pre-selected data OUT endpoint. This routine reads in OS sized blocks from the endpoint and writes ++ * them to the Dataflash in Dataflash page sized blocks. ++ * ++ * \param[in] MSInterfaceInfo Pointer to a structure containing a Mass Storage Class configuration and state ++ * \param[in] BlockAddress Data block starting address for the write sequence ++ * \param[in] TotalBlocks Number of blocks of data to write ++ */ ++void DataflashManager_WriteBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo, ++ const uint32_t BlockAddress, ++ uint16_t TotalBlocks) ++{ ++ uint16_t CurrDFPage = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE); ++ uint16_t CurrDFPageByte = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE); ++ uint8_t CurrDFPageByteDiv16 = (CurrDFPageByte >> 4); ++ bool UsingSecondBuffer = false; ++ ++ /* Select the correct starting Dataflash IC for the block requested */ ++ Dataflash_SelectChipFromPage(CurrDFPage); ++ ++#if (DATAFLASH_PAGE_SIZE > VIRTUAL_MEMORY_BLOCK_SIZE) ++ /* Copy selected dataflash's current page contents to the Dataflash buffer */ ++ Dataflash_SendByte(DF_CMD_MAINMEMTOBUFF1); ++ Dataflash_SendAddressBytes(CurrDFPage, 0); ++ Dataflash_WaitWhileBusy(); ++#endif ++ ++ /* Send the Dataflash buffer write command */ ++ Dataflash_SendByte(DF_CMD_BUFF1WRITE); ++ Dataflash_SendAddressBytes(0, CurrDFPageByte); ++ ++ /* Wait until endpoint is ready before continuing */ ++ if (Endpoint_WaitUntilReady()) ++ return; ++ ++ while (TotalBlocks) ++ { ++ uint8_t BytesInBlockDiv16 = 0; ++ ++ /* Write an endpoint packet sized data block to the Dataflash */ ++ while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4)) ++ { ++ /* Check if the endpoint is currently empty */ ++ if (!(Endpoint_IsReadWriteAllowed())) ++ { ++ /* Clear the current endpoint bank */ ++ Endpoint_ClearOUT(); ++ ++ /* Wait until the host has sent another packet */ ++ if (Endpoint_WaitUntilReady()) ++ return; ++ } ++ ++ /* Check if end of Dataflash page reached */ ++ if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4)) ++ { ++ /* Write the Dataflash buffer contents back to the Dataflash page */ ++ Dataflash_WaitWhileBusy(); ++ Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_BUFF2TOMAINMEMWITHERASE : DF_CMD_BUFF1TOMAINMEMWITHERASE); ++ Dataflash_SendAddressBytes(CurrDFPage, 0); ++ ++ /* Reset the Dataflash buffer counter, increment the page counter */ ++ CurrDFPageByteDiv16 = 0; ++ CurrDFPage++; ++ ++ /* Once all the Dataflash ICs have had their first buffers filled, switch buffers to maintain throughput */ ++ if (Dataflash_GetSelectedChip() == DATAFLASH_CHIP_MASK(DATAFLASH_TOTALCHIPS)) ++ UsingSecondBuffer = !(UsingSecondBuffer); ++ ++ /* Select the next Dataflash chip based on the new Dataflash page index */ ++ Dataflash_SelectChipFromPage(CurrDFPage); ++ ++#if (DATAFLASH_PAGE_SIZE > VIRTUAL_MEMORY_BLOCK_SIZE) ++ /* If less than one Dataflash page remaining, copy over the existing page to preserve trailing data */ ++ if ((TotalBlocks * (VIRTUAL_MEMORY_BLOCK_SIZE >> 4)) < (DATAFLASH_PAGE_SIZE >> 4)) ++ { ++ /* Copy selected dataflash's current page contents to the Dataflash buffer */ ++ Dataflash_WaitWhileBusy(); ++ Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_MAINMEMTOBUFF2 : DF_CMD_MAINMEMTOBUFF1); ++ Dataflash_SendAddressBytes(CurrDFPage, 0); ++ Dataflash_WaitWhileBusy(); ++ } ++#endif ++ ++ /* Send the Dataflash buffer write command */ ++ Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_BUFF2WRITE : DF_CMD_BUFF1WRITE); ++ Dataflash_SendAddressBytes(0, 0); ++ } ++ ++ /* Write one 16-byte chunk of data to the Dataflash */ ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ ++ /* Increment the Dataflash page 16 byte block counter */ ++ CurrDFPageByteDiv16++; ++ ++ /* Increment the block 16 byte block counter */ ++ BytesInBlockDiv16++; ++ ++ /* Check if the current command is being aborted by the host */ ++ if (MSInterfaceInfo->State.IsMassStoreReset) ++ return; ++ } ++ ++ /* Decrement the blocks remaining counter */ ++ TotalBlocks--; ++ } ++ ++ /* Write the Dataflash buffer contents back to the Dataflash page */ ++ Dataflash_WaitWhileBusy(); ++ Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_BUFF2TOMAINMEMWITHERASE : DF_CMD_BUFF1TOMAINMEMWITHERASE); ++ Dataflash_SendAddressBytes(CurrDFPage, 0x00); ++ Dataflash_WaitWhileBusy(); ++ ++ /* If the endpoint is empty, clear it ready for the next packet from the host */ ++ if (!(Endpoint_IsReadWriteAllowed())) ++ Endpoint_ClearOUT(); ++ ++ /* Deselect all Dataflash chips */ ++ Dataflash_DeselectChip(); ++} ++ ++/** Reads blocks (OS blocks, not Dataflash pages) from the storage medium, the board Dataflash IC(s), into ++ * the pre-selected data IN endpoint. This routine reads in Dataflash page sized blocks from the Dataflash ++ * and writes them in OS sized blocks to the endpoint. ++ * ++ * \param[in] MSInterfaceInfo Pointer to a structure containing a Mass Storage Class configuration and state ++ * \param[in] BlockAddress Data block starting address for the read sequence ++ * \param[in] TotalBlocks Number of blocks of data to read ++ */ ++void DataflashManager_ReadBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo, ++ const uint32_t BlockAddress, ++ uint16_t TotalBlocks) ++{ ++ uint16_t CurrDFPage = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE); ++ uint16_t CurrDFPageByte = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE); ++ uint8_t CurrDFPageByteDiv16 = (CurrDFPageByte >> 4); ++ ++ /* Select the correct starting Dataflash IC for the block requested */ ++ Dataflash_SelectChipFromPage(CurrDFPage); ++ ++ /* Send the Dataflash main memory page read command */ ++ Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD); ++ Dataflash_SendAddressBytes(CurrDFPage, CurrDFPageByte); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ ++ /* Wait until endpoint is ready before continuing */ ++ if (Endpoint_WaitUntilReady()) ++ return; ++ ++ while (TotalBlocks) ++ { ++ uint8_t BytesInBlockDiv16 = 0; ++ ++ /* Read an endpoint packet sized data block from the Dataflash */ ++ while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4)) ++ { ++ /* Check if the endpoint is currently full */ ++ if (!(Endpoint_IsReadWriteAllowed())) ++ { ++ /* Clear the endpoint bank to send its contents to the host */ ++ Endpoint_ClearIN(); ++ ++ /* Wait until the endpoint is ready for more data */ ++ if (Endpoint_WaitUntilReady()) ++ return; ++ } ++ ++ /* Check if end of Dataflash page reached */ ++ if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4)) ++ { ++ /* Reset the Dataflash buffer counter, increment the page counter */ ++ CurrDFPageByteDiv16 = 0; ++ CurrDFPage++; ++ ++ /* Select the next Dataflash chip based on the new Dataflash page index */ ++ Dataflash_SelectChipFromPage(CurrDFPage); ++ ++ /* Send the Dataflash main memory page read command */ ++ Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD); ++ Dataflash_SendAddressBytes(CurrDFPage, 0); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ } ++ ++ /* Read one 16-byte chunk of data from the Dataflash */ ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ ++ /* Increment the Dataflash page 16 byte block counter */ ++ CurrDFPageByteDiv16++; ++ ++ /* Increment the block 16 byte block counter */ ++ BytesInBlockDiv16++; ++ ++ /* Check if the current command is being aborted by the host */ ++ if (MSInterfaceInfo->State.IsMassStoreReset) ++ return; ++ } ++ ++ /* Decrement the blocks remaining counter */ ++ TotalBlocks--; ++ } ++ ++ /* If the endpoint is full, send its contents to the host */ ++ if (!(Endpoint_IsReadWriteAllowed())) ++ Endpoint_ClearIN(); ++ ++ /* Deselect all Dataflash chips */ ++ Dataflash_DeselectChip(); ++} ++ ++/** Writes blocks (OS blocks, not Dataflash pages) to the storage medium, the board Dataflash IC(s), from ++ * the given RAM buffer. This routine reads in OS sized blocks from the buffer and writes them to the ++ * Dataflash in Dataflash page sized blocks. This can be linked to FAT libraries to write files to the ++ * Dataflash. ++ * ++ * \param[in] BlockAddress Data block starting address for the write sequence ++ * \param[in] TotalBlocks Number of blocks of data to write ++ * \param[in] BufferPtr Pointer to the data source RAM buffer ++ */ ++void DataflashManager_WriteBlocks_RAM(const uint32_t BlockAddress, ++ uint16_t TotalBlocks, ++ uint8_t* BufferPtr) ++{ ++ uint16_t CurrDFPage = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE); ++ uint16_t CurrDFPageByte = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE); ++ uint8_t CurrDFPageByteDiv16 = (CurrDFPageByte >> 4); ++ bool UsingSecondBuffer = false; ++ ++ /* Select the correct starting Dataflash IC for the block requested */ ++ Dataflash_SelectChipFromPage(CurrDFPage); ++ ++#if (DATAFLASH_PAGE_SIZE > VIRTUAL_MEMORY_BLOCK_SIZE) ++ /* Copy selected dataflash's current page contents to the Dataflash buffer */ ++ Dataflash_SendByte(DF_CMD_MAINMEMTOBUFF1); ++ Dataflash_SendAddressBytes(CurrDFPage, 0); ++ Dataflash_WaitWhileBusy(); ++#endif ++ ++ /* Send the Dataflash buffer write command */ ++ Dataflash_SendByte(DF_CMD_BUFF1WRITE); ++ Dataflash_SendAddressBytes(0, CurrDFPageByte); ++ ++ while (TotalBlocks) ++ { ++ uint8_t BytesInBlockDiv16 = 0; ++ ++ /* Write an endpoint packet sized data block to the Dataflash */ ++ while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4)) ++ { ++ /* Check if end of Dataflash page reached */ ++ if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4)) ++ { ++ /* Write the Dataflash buffer contents back to the Dataflash page */ ++ Dataflash_WaitWhileBusy(); ++ Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_BUFF2TOMAINMEMWITHERASE : DF_CMD_BUFF1TOMAINMEMWITHERASE); ++ Dataflash_SendAddressBytes(CurrDFPage, 0); ++ ++ /* Reset the Dataflash buffer counter, increment the page counter */ ++ CurrDFPageByteDiv16 = 0; ++ CurrDFPage++; ++ ++ /* Once all the Dataflash ICs have had their first buffers filled, switch buffers to maintain throughput */ ++ if (Dataflash_GetSelectedChip() == DATAFLASH_CHIP_MASK(DATAFLASH_TOTALCHIPS)) ++ UsingSecondBuffer = !(UsingSecondBuffer); ++ ++ /* Select the next Dataflash chip based on the new Dataflash page index */ ++ Dataflash_SelectChipFromPage(CurrDFPage); ++ ++#if (DATAFLASH_PAGE_SIZE > VIRTUAL_MEMORY_BLOCK_SIZE) ++ /* If less than one Dataflash page remaining, copy over the existing page to preserve trailing data */ ++ if ((TotalBlocks * (VIRTUAL_MEMORY_BLOCK_SIZE >> 4)) < (DATAFLASH_PAGE_SIZE >> 4)) ++ { ++ /* Copy selected dataflash's current page contents to the Dataflash buffer */ ++ Dataflash_WaitWhileBusy(); ++ Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_MAINMEMTOBUFF2 : DF_CMD_MAINMEMTOBUFF1); ++ Dataflash_SendAddressBytes(CurrDFPage, 0); ++ Dataflash_WaitWhileBusy(); ++ } ++#endif ++ ++ /* Send the Dataflash buffer write command */ ++ Dataflash_ToggleSelectedChipCS(); ++ Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_BUFF2WRITE : DF_CMD_BUFF1WRITE); ++ Dataflash_SendAddressBytes(0, 0); ++ } ++ ++ /* Write one 16-byte chunk of data to the Dataflash */ ++ for (uint8_t ByteNum = 0; ByteNum < 16; ByteNum++) ++ Dataflash_SendByte(*(BufferPtr++)); ++ ++ /* Increment the Dataflash page 16 byte block counter */ ++ CurrDFPageByteDiv16++; ++ ++ /* Increment the block 16 byte block counter */ ++ BytesInBlockDiv16++; ++ } ++ ++ /* Decrement the blocks remaining counter */ ++ TotalBlocks--; ++ } ++ ++ /* Write the Dataflash buffer contents back to the Dataflash page */ ++ Dataflash_WaitWhileBusy(); ++ Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_BUFF2TOMAINMEMWITHERASE : DF_CMD_BUFF1TOMAINMEMWITHERASE); ++ Dataflash_SendAddressBytes(CurrDFPage, 0x00); ++ Dataflash_WaitWhileBusy(); ++ ++ /* Deselect all Dataflash chips */ ++ Dataflash_DeselectChip(); ++} ++ ++/** Reads blocks (OS blocks, not Dataflash pages) from the storage medium, the board Dataflash IC(s), into ++ * the preallocated RAM buffer. This routine reads in Dataflash page sized blocks from the Dataflash ++ * and writes them in OS sized blocks to the given buffer. This can be linked to FAT libraries to read ++ * the files stored on the Dataflash. ++ * ++ * \param[in] BlockAddress Data block starting address for the read sequence ++ * \param[in] TotalBlocks Number of blocks of data to read ++ * \param[out] BufferPtr Pointer to the data destination RAM buffer ++ */ ++void DataflashManager_ReadBlocks_RAM(const uint32_t BlockAddress, ++ uint16_t TotalBlocks, ++ uint8_t* BufferPtr) ++{ ++ uint16_t CurrDFPage = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE); ++ uint16_t CurrDFPageByte = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE); ++ uint8_t CurrDFPageByteDiv16 = (CurrDFPageByte >> 4); ++ ++ /* Select the correct starting Dataflash IC for the block requested */ ++ Dataflash_SelectChipFromPage(CurrDFPage); ++ ++ /* Send the Dataflash main memory page read command */ ++ Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD); ++ Dataflash_SendAddressBytes(CurrDFPage, CurrDFPageByte); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ ++ while (TotalBlocks) ++ { ++ uint8_t BytesInBlockDiv16 = 0; ++ ++ /* Read an endpoint packet sized data block from the Dataflash */ ++ while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4)) ++ { ++ /* Check if end of Dataflash page reached */ ++ if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4)) ++ { ++ /* Reset the Dataflash buffer counter, increment the page counter */ ++ CurrDFPageByteDiv16 = 0; ++ CurrDFPage++; ++ ++ /* Select the next Dataflash chip based on the new Dataflash page index */ ++ Dataflash_SelectChipFromPage(CurrDFPage); ++ ++ /* Send the Dataflash main memory page read command */ ++ Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD); ++ Dataflash_SendAddressBytes(CurrDFPage, 0); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ } ++ ++ /* Read one 16-byte chunk of data from the Dataflash */ ++ for (uint8_t ByteNum = 0; ByteNum < 16; ByteNum++) ++ *(BufferPtr++) = Dataflash_ReceiveByte(); ++ ++ /* Increment the Dataflash page 16 byte block counter */ ++ CurrDFPageByteDiv16++; ++ ++ /* Increment the block 16 byte block counter */ ++ BytesInBlockDiv16++; ++ } ++ ++ /* Decrement the blocks remaining counter */ ++ TotalBlocks--; ++ } ++ ++ /* Deselect all Dataflash chips */ ++ Dataflash_DeselectChip(); ++} ++ ++/** Disables the Dataflash memory write protection bits on the board Dataflash ICs, if enabled. */ ++void DataflashManager_ResetDataflashProtections(void) ++{ ++ /* Select first Dataflash chip, send the read status register command */ ++ Dataflash_SelectChip(DATAFLASH_CHIP1); ++ Dataflash_SendByte(DF_CMD_GETSTATUS); ++ ++ /* Check if sector protection is enabled */ ++ if (Dataflash_ReceiveByte() & DF_STATUS_SECTORPROTECTION_ON) ++ { ++ Dataflash_ToggleSelectedChipCS(); ++ ++ /* Send the commands to disable sector protection */ ++ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[0]); ++ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[1]); ++ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[2]); ++ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[3]); ++ } ++ ++ /* Select second Dataflash chip (if present on selected board), send read status register command */ ++ #if (DATAFLASH_TOTALCHIPS == 2) ++ Dataflash_SelectChip(DATAFLASH_CHIP2); ++ Dataflash_SendByte(DF_CMD_GETSTATUS); ++ ++ /* Check if sector protection is enabled */ ++ if (Dataflash_ReceiveByte() & DF_STATUS_SECTORPROTECTION_ON) ++ { ++ Dataflash_ToggleSelectedChipCS(); ++ ++ /* Send the commands to disable sector protection */ ++ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[0]); ++ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[1]); ++ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[2]); ++ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[3]); ++ } ++ #endif ++ ++ /* Deselect current Dataflash chip */ ++ Dataflash_DeselectChip(); ++} ++ ++/** Performs a simple test on the attached Dataflash IC(s) to ensure that they are working. ++ * ++ * \return Boolean \c true if all media chips are working, \c false otherwise ++ */ ++bool DataflashManager_CheckDataflashOperation(void) ++{ ++ uint8_t ReturnByte; ++ ++ /* Test first Dataflash IC is present and responding to commands */ ++ Dataflash_SelectChip(DATAFLASH_CHIP1); ++ Dataflash_SendByte(DF_CMD_READMANUFACTURERDEVICEINFO); ++ ReturnByte = Dataflash_ReceiveByte(); ++ Dataflash_DeselectChip(); ++ ++ /* If returned data is invalid, fail the command */ ++ if (ReturnByte != DF_MANUFACTURER_ATMEL) ++ return false; ++ ++ #if (DATAFLASH_TOTALCHIPS == 2) ++ /* Test second Dataflash IC is present and responding to commands */ ++ Dataflash_SelectChip(DATAFLASH_CHIP2); ++ Dataflash_SendByte(DF_CMD_READMANUFACTURERDEVICEINFO); ++ ReturnByte = Dataflash_ReceiveByte(); ++ Dataflash_DeselectChip(); ++ ++ /* If returned data is invalid, fail the command */ ++ if (ReturnByte != DF_MANUFACTURER_ATMEL) ++ return false; ++ #endif ++ ++ return true; ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/MassStorageKeyboard/Lib/DataflashManager.h index 000000000,000000000..076847a7d new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/MassStorageKeyboard/Lib/DataflashManager.h @@@ -1,0 -1,0 +1,87 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 DataflashManager.c. ++ */ ++ ++#ifndef _DATAFLASH_MANAGER_H_ ++#define _DATAFLASH_MANAGER_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ ++ #include "../MassStorageKeyboard.h" ++ #include "../Descriptors.h" ++ #include "Config/AppConfig.h" ++ ++ #include <LUFA/Common/Common.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Drivers/Board/Dataflash.h> ++ ++ /* Preprocessor Checks: */ ++ #if (DATAFLASH_PAGE_SIZE % 16) ++ #error Dataflash page size must be a multiple of 16 bytes. ++ #endif ++ ++ /* Defines: */ ++ /** Total number of bytes of the storage medium, comprised of one or more Dataflash ICs. */ ++ #define VIRTUAL_MEMORY_BYTES ((uint32_t)DATAFLASH_PAGES * DATAFLASH_PAGE_SIZE * DATAFLASH_TOTALCHIPS) ++ ++ /** Block size of the device. This is kept at 512 to remain compatible with the OS despite the underlying ++ * storage media (Dataflash) using a different native block size. ++ */ ++ #define VIRTUAL_MEMORY_BLOCK_SIZE 512 ++ ++ /** Total number of blocks of the virtual memory for reporting to the host as the device's total capacity. */ ++ #define VIRTUAL_MEMORY_BLOCKS (VIRTUAL_MEMORY_BYTES / VIRTUAL_MEMORY_BLOCK_SIZE) ++ ++ /** Blocks in each LUN, calculated from the total capacity divided by the total number of Logical Units in the device. */ ++ #define LUN_MEDIA_BLOCKS (VIRTUAL_MEMORY_BLOCKS / TOTAL_LUNS) ++ ++ /* Function Prototypes: */ ++ void DataflashManager_WriteBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo, ++ const uint32_t BlockAddress, ++ uint16_t TotalBlocks); ++ void DataflashManager_ReadBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo, ++ const uint32_t BlockAddress, ++ uint16_t TotalBlocks); ++ void DataflashManager_WriteBlocks_RAM(const uint32_t BlockAddress, ++ uint16_t TotalBlocks, ++ uint8_t* BufferPtr) ATTR_NON_NULL_PTR_ARG(3); ++ void DataflashManager_ReadBlocks_RAM(const uint32_t BlockAddress, ++ uint16_t TotalBlocks, ++ uint8_t* BufferPtr) ATTR_NON_NULL_PTR_ARG(3); ++ void DataflashManager_ResetDataflashProtections(void); ++ bool DataflashManager_CheckDataflashOperation(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/MassStorageKeyboard/Lib/SCSI.c index 000000000,000000000..8780d1603 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/MassStorageKeyboard/Lib/SCSI.c @@@ -1,0 -1,0 +1,349 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * SCSI command processing routines, for SCSI commands issued by the host. Mass Storage ++ * devices use a thin "Bulk-Only Transport" protocol for issuing commands and status information, ++ * which wrap around standard SCSI device commands for controlling the actual storage medium. ++ */ ++ ++#define INCLUDE_FROM_SCSI_C ++#include "SCSI.h" ++ ++/** Structure to hold the SCSI response data to a SCSI INQUIRY command. This gives information about the device's ++ * features and capabilities. ++ */ ++static const SCSI_Inquiry_Response_t InquiryData = ++ { ++ .DeviceType = DEVICE_TYPE_BLOCK, ++ .PeripheralQualifier = 0, ++ ++ .Removable = true, ++ ++ .Version = 0, ++ ++ .ResponseDataFormat = 2, ++ .NormACA = false, ++ .TrmTsk = false, ++ .AERC = false, ++ ++ .AdditionalLength = 0x1F, ++ ++ .SoftReset = false, ++ .CmdQue = false, ++ .Linked = false, ++ .Sync = false, ++ .WideBus16Bit = false, ++ .WideBus32Bit = false, ++ .RelAddr = false, ++ ++ .VendorID = "LUFA", ++ .ProductID = "Dataflash Disk", ++ .RevisionID = {'0','.','0','0'}, ++ }; ++ ++/** Structure to hold the sense data for the last issued SCSI command, which is returned to the host after a SCSI REQUEST SENSE ++ * command is issued. This gives information on exactly why the last command failed to complete. ++ */ ++static SCSI_Request_Sense_Response_t SenseData = ++ { ++ .ResponseCode = 0x70, ++ .AdditionalLength = 0x0A, ++ }; ++ ++ ++/** Main routine to process the SCSI command located in the Command Block Wrapper read from the host. This dispatches ++ * to the appropriate SCSI command handling routine if the issued command is supported by the device, else it returns ++ * a command failure due to a ILLEGAL REQUEST. ++ * ++ * \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with ++ * ++ * \return Boolean \c true if the command completed successfully, \c false otherwise ++ */ ++bool SCSI_DecodeSCSICommand(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) ++{ ++ bool CommandSuccess = false; ++ ++ /* Run the appropriate SCSI command hander function based on the passed command */ ++ switch (MSInterfaceInfo->State.CommandBlock.SCSICommandData[0]) ++ { ++ case SCSI_CMD_INQUIRY: ++ CommandSuccess = SCSI_Command_Inquiry(MSInterfaceInfo); ++ break; ++ case SCSI_CMD_REQUEST_SENSE: ++ CommandSuccess = SCSI_Command_Request_Sense(MSInterfaceInfo); ++ break; ++ case SCSI_CMD_READ_CAPACITY_10: ++ CommandSuccess = SCSI_Command_Read_Capacity_10(MSInterfaceInfo); ++ break; ++ case SCSI_CMD_SEND_DIAGNOSTIC: ++ CommandSuccess = SCSI_Command_Send_Diagnostic(MSInterfaceInfo); ++ break; ++ case SCSI_CMD_WRITE_10: ++ CommandSuccess = SCSI_Command_ReadWrite_10(MSInterfaceInfo, DATA_WRITE); ++ break; ++ case SCSI_CMD_READ_10: ++ CommandSuccess = SCSI_Command_ReadWrite_10(MSInterfaceInfo, DATA_READ); ++ break; ++ case SCSI_CMD_MODE_SENSE_6: ++ CommandSuccess = SCSI_Command_ModeSense_6(MSInterfaceInfo); ++ break; ++ case SCSI_CMD_START_STOP_UNIT: ++ case SCSI_CMD_TEST_UNIT_READY: ++ case SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL: ++ case SCSI_CMD_VERIFY_10: ++ /* These commands should just succeed, no handling required */ ++ CommandSuccess = true; ++ MSInterfaceInfo->State.CommandBlock.DataTransferLength = 0; ++ break; ++ default: ++ /* Update the SENSE key to reflect the invalid command */ ++ SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST, ++ SCSI_ASENSE_INVALID_COMMAND, ++ SCSI_ASENSEQ_NO_QUALIFIER); ++ break; ++ } ++ ++ /* Check if command was successfully processed */ ++ if (CommandSuccess) ++ { ++ SCSI_SET_SENSE(SCSI_SENSE_KEY_GOOD, ++ SCSI_ASENSE_NO_ADDITIONAL_INFORMATION, ++ SCSI_ASENSEQ_NO_QUALIFIER); ++ ++ return true; ++ } ++ ++ return false; ++} ++ ++/** Command processing for an issued SCSI INQUIRY command. This command returns information about the device's features ++ * and capabilities to the host. ++ * ++ * \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with ++ * ++ * \return Boolean \c true if the command completed successfully, \c false otherwise. ++ */ ++static bool SCSI_Command_Inquiry(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) ++{ ++ uint16_t AllocationLength = SwapEndian_16(*(uint16_t*)&MSInterfaceInfo->State.CommandBlock.SCSICommandData[3]); ++ uint16_t BytesTransferred = MIN(AllocationLength, sizeof(InquiryData)); ++ ++ /* Only the standard INQUIRY data is supported, check if any optional INQUIRY bits set */ ++ if ((MSInterfaceInfo->State.CommandBlock.SCSICommandData[1] & ((1 << 0) | (1 << 1))) || ++ MSInterfaceInfo->State.CommandBlock.SCSICommandData[2]) ++ { ++ /* Optional but unsupported bits set - update the SENSE key and fail the request */ ++ SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST, ++ SCSI_ASENSE_INVALID_FIELD_IN_CDB, ++ SCSI_ASENSEQ_NO_QUALIFIER); ++ ++ return false; ++ } ++ ++ Endpoint_Write_Stream_LE(&InquiryData, BytesTransferred, NULL); ++ ++ /* Pad out remaining bytes with 0x00 */ ++ Endpoint_Null_Stream((AllocationLength - BytesTransferred), NULL); ++ ++ /* Finalize the stream transfer to send the last packet */ ++ Endpoint_ClearIN(); ++ ++ /* Succeed the command and update the bytes transferred counter */ ++ MSInterfaceInfo->State.CommandBlock.DataTransferLength -= BytesTransferred; ++ ++ return true; ++} ++ ++/** Command processing for an issued SCSI REQUEST SENSE command. This command returns information about the last issued command, ++ * including the error code and additional error information so that the host can determine why a command failed to complete. ++ * ++ * \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with ++ * ++ * \return Boolean \c true if the command completed successfully, \c false otherwise. ++ */ ++static bool SCSI_Command_Request_Sense(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) ++{ ++ uint8_t AllocationLength = MSInterfaceInfo->State.CommandBlock.SCSICommandData[4]; ++ uint8_t BytesTransferred = MIN(AllocationLength, sizeof(SenseData)); ++ ++ Endpoint_Write_Stream_LE(&SenseData, BytesTransferred, NULL); ++ Endpoint_Null_Stream((AllocationLength - BytesTransferred), NULL); ++ Endpoint_ClearIN(); ++ ++ /* Succeed the command and update the bytes transferred counter */ ++ MSInterfaceInfo->State.CommandBlock.DataTransferLength -= BytesTransferred; ++ ++ return true; ++} ++ ++/** Command processing for an issued SCSI READ CAPACITY (10) command. This command returns information about the device's capacity ++ * on the selected Logical Unit (drive), as a number of OS-sized blocks. ++ * ++ * \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with ++ * ++ * \return Boolean \c true if the command completed successfully, \c false otherwise. ++ */ ++static bool SCSI_Command_Read_Capacity_10(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) ++{ ++ uint32_t LastBlockAddressInLUN = (LUN_MEDIA_BLOCKS - 1); ++ uint32_t MediaBlockSize = VIRTUAL_MEMORY_BLOCK_SIZE; ++ ++ Endpoint_Write_Stream_BE(&LastBlockAddressInLUN, sizeof(LastBlockAddressInLUN), NULL); ++ Endpoint_Write_Stream_BE(&MediaBlockSize, sizeof(MediaBlockSize), NULL); ++ Endpoint_ClearIN(); ++ ++ /* Succeed the command and update the bytes transferred counter */ ++ MSInterfaceInfo->State.CommandBlock.DataTransferLength -= 8; ++ ++ return true; ++} ++ ++/** Command processing for an issued SCSI SEND DIAGNOSTIC command. This command performs a quick check of the Dataflash ICs on the ++ * board, and indicates if they are present and functioning correctly. Only the Self-Test portion of the diagnostic command is ++ * supported. ++ * ++ * \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with ++ * ++ * \return Boolean \c true if the command completed successfully, \c false otherwise. ++ */ ++static bool SCSI_Command_Send_Diagnostic(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) ++{ ++ /* Check to see if the SELF TEST bit is not set */ ++ if (!(MSInterfaceInfo->State.CommandBlock.SCSICommandData[1] & (1 << 2))) ++ { ++ /* Only self-test supported - update SENSE key and fail the command */ ++ SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST, ++ SCSI_ASENSE_INVALID_FIELD_IN_CDB, ++ SCSI_ASENSEQ_NO_QUALIFIER); ++ ++ return false; ++ } ++ ++ /* Check to see if all attached Dataflash ICs are functional */ ++ if (!(DataflashManager_CheckDataflashOperation())) ++ { ++ /* Update SENSE key with a hardware error condition and return command fail */ ++ SCSI_SET_SENSE(SCSI_SENSE_KEY_HARDWARE_ERROR, ++ SCSI_ASENSE_NO_ADDITIONAL_INFORMATION, ++ SCSI_ASENSEQ_NO_QUALIFIER); ++ ++ return false; ++ } ++ ++ /* Succeed the command and update the bytes transferred counter */ ++ MSInterfaceInfo->State.CommandBlock.DataTransferLength = 0; ++ ++ return true; ++} ++ ++/** Command processing for an issued SCSI READ (10) or WRITE (10) command. This command reads in the block start address ++ * and total number of blocks to process, then calls the appropriate low-level Dataflash routine to handle the actual ++ * reading and writing of the data. ++ * ++ * \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with ++ * \param[in] IsDataRead Indicates if the command is a READ (10) command or WRITE (10) command (DATA_READ or DATA_WRITE) ++ * ++ * \return Boolean \c true if the command completed successfully, \c false otherwise. ++ */ ++static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo, ++ const bool IsDataRead) ++{ ++ uint32_t BlockAddress; ++ uint16_t TotalBlocks; ++ ++ /* Check if the disk is write protected or not */ ++ if ((IsDataRead == DATA_WRITE) && DISK_READ_ONLY) ++ { ++ /* Block address is invalid, update SENSE key and return command fail */ ++ SCSI_SET_SENSE(SCSI_SENSE_KEY_DATA_PROTECT, ++ SCSI_ASENSE_WRITE_PROTECTED, ++ SCSI_ASENSEQ_NO_QUALIFIER); ++ ++ return false; ++ } ++ ++ /* Load in the 32-bit block address (SCSI uses big-endian, so have to reverse the byte order) */ ++ BlockAddress = SwapEndian_32(*(uint32_t*)&MSInterfaceInfo->State.CommandBlock.SCSICommandData[2]); ++ ++ /* Load in the 16-bit total blocks (SCSI uses big-endian, so have to reverse the byte order) */ ++ TotalBlocks = SwapEndian_16(*(uint16_t*)&MSInterfaceInfo->State.CommandBlock.SCSICommandData[7]); ++ ++ /* Check if the block address is outside the maximum allowable value for the LUN */ ++ if (BlockAddress >= LUN_MEDIA_BLOCKS) ++ { ++ /* Block address is invalid, update SENSE key and return command fail */ ++ SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST, ++ SCSI_ASENSE_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE, ++ SCSI_ASENSEQ_NO_QUALIFIER); ++ ++ return false; ++ } ++ ++ #if (TOTAL_LUNS > 1) ++ /* Adjust the given block address to the real media address based on the selected LUN */ ++ BlockAddress += ((uint32_t)MSInterfaceInfo->State.CommandBlock.LUN * LUN_MEDIA_BLOCKS); ++ #endif ++ ++ /* Determine if the packet is a READ (10) or WRITE (10) command, call appropriate function */ ++ if (IsDataRead == DATA_READ) ++ DataflashManager_ReadBlocks(MSInterfaceInfo, BlockAddress, TotalBlocks); ++ else ++ DataflashManager_WriteBlocks(MSInterfaceInfo, BlockAddress, TotalBlocks); ++ ++ /* Update the bytes transferred counter and succeed the command */ ++ MSInterfaceInfo->State.CommandBlock.DataTransferLength -= ((uint32_t)TotalBlocks * VIRTUAL_MEMORY_BLOCK_SIZE); ++ ++ return true; ++} ++ ++/** Command processing for an issued SCSI MODE SENSE (6) command. This command returns various informational pages about ++ * the SCSI device, as well as the device's Write Protect status. ++ * ++ * \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with ++ * ++ * \return Boolean \c true if the command completed successfully, \c false otherwise. ++ */ ++static bool SCSI_Command_ModeSense_6(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) ++{ ++ /* Send an empty header response with the Write Protect flag status */ ++ Endpoint_Write_8(0x00); ++ Endpoint_Write_8(0x00); ++ Endpoint_Write_8(DISK_READ_ONLY ? 0x80 : 0x00); ++ Endpoint_Write_8(0x00); ++ Endpoint_ClearIN(); ++ ++ /* Update the bytes transferred counter and succeed the command */ ++ MSInterfaceInfo->State.CommandBlock.DataTransferLength -= 4; ++ ++ return true; ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/MassStorageKeyboard/Lib/SCSI.h index 000000000,000000000..c442e4538 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/MassStorageKeyboard/Lib/SCSI.h @@@ -1,0 -1,0 +1,89 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 SCSI.c. ++ */ ++ ++#ifndef _SCSI_H_ ++#define _SCSI_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/pgmspace.h> ++ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include "../MassStorageKeyboard.h" ++ #include "../Descriptors.h" ++ #include "DataflashManager.h" ++ #include "Config/AppConfig.h" ++ ++ /* Macros: */ ++ /** Macro to set the current SCSI sense data to the given key, additional sense code and additional sense qualifier. This ++ * is for convenience, as it allows for all three sense values (returned upon request to the host to give information about ++ * the last command failure) in a quick and easy manner. ++ * ++ * \param[in] Key New SCSI sense key to set the sense code to ++ * \param[in] Acode New SCSI additional sense key to set the additional sense code to ++ * \param[in] Aqual New SCSI additional sense key qualifier to set the additional sense qualifier code to ++ */ ++ #define SCSI_SET_SENSE(Key, Acode, Aqual) do { SenseData.SenseKey = (Key); \ ++ SenseData.AdditionalSenseCode = (Acode); \ ++ SenseData.AdditionalSenseQualifier = (Aqual); } while (0) ++ ++ /** Macro for the \ref SCSI_Command_ReadWrite_10() function, to indicate that data is to be read from the storage medium. */ ++ #define DATA_READ true ++ ++ /** Macro for the \ref SCSI_Command_ReadWrite_10() function, to indicate that data is to be written to the storage medium. */ ++ #define DATA_WRITE false ++ ++ /** Value for the DeviceType entry in the SCSI_Inquiry_Response_t enum, indicating a Block Media device. */ ++ #define DEVICE_TYPE_BLOCK 0x00 ++ ++ /** Value for the DeviceType entry in the SCSI_Inquiry_Response_t enum, indicating a CD-ROM device. */ ++ #define DEVICE_TYPE_CDROM 0x05 ++ ++ /* Function Prototypes: */ ++ bool SCSI_DecodeSCSICommand(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo); ++ ++ #if defined(INCLUDE_FROM_SCSI_C) ++ static bool SCSI_Command_Inquiry(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo); ++ static bool SCSI_Command_Request_Sense(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo); ++ static bool SCSI_Command_Read_Capacity_10(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo); ++ static bool SCSI_Command_Send_Diagnostic(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo); ++ static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo, ++ const bool IsDataRead); ++ static bool SCSI_Command_ModeSense_6(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo); ++ #endif ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/MassStorageKeyboard/MassStorageKeyboard.c index 000000000,000000000..3a1b7805e new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/MassStorageKeyboard/MassStorageKeyboard.c @@@ -1,0 -1,0 +1,270 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ Copyright 2010 Matthias Hullin (lufa [at] matthias [dot] hullin [dot] net) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 MassStorageKeyboard demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "MassStorageKeyboard.h" ++ ++/** LUFA Mass Storage Class driver interface configuration and state information. This structure is ++ * passed to all Mass Storage Class driver functions, so that multiple instances of the same class ++ * within a device can be differentiated from one another. ++ */ ++USB_ClassInfo_MS_Device_t Disk_MS_Interface = ++ { ++ .Config = ++ { ++ .InterfaceNumber = INTERFACE_ID_MassStorage, ++ .DataINEndpoint = ++ { ++ .Address = MASS_STORAGE_IN_EPADDR, ++ .Size = MASS_STORAGE_IO_EPSIZE, ++ .Banks = 1, ++ }, ++ .DataOUTEndpoint = ++ { ++ .Address = MASS_STORAGE_OUT_EPADDR, ++ .Size = MASS_STORAGE_IO_EPSIZE, ++ .Banks = 1, ++ }, ++ .TotalLUNs = TOTAL_LUNS, ++ }, ++ }; ++ ++/** Buffer to hold the previously generated Keyboard HID report, for comparison purposes inside the HID class driver. */ ++static uint8_t PrevKeyboardHIDReportBuffer[sizeof(USB_KeyboardReport_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 Keyboard_HID_Interface = ++ { ++ .Config = ++ { ++ .InterfaceNumber = INTERFACE_ID_Keyboard, ++ .ReportINEndpoint = ++ { ++ .Address = KEYBOARD_EPADDR, ++ .Size = KEYBOARD_EPSIZE, ++ .Banks = 1, ++ }, ++ .PrevReportINBuffer = PrevKeyboardHIDReportBuffer, ++ .PrevReportINBufferSize = sizeof(PrevKeyboardHIDReportBuffer), ++ }, ++ }; ++ ++/** 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); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ MS_Device_USBTask(&Disk_MS_Interface); ++ HID_Device_USBTask(&Keyboard_HID_Interface); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#elif (ARCH == ARCH_XMEGA) ++ /* Start the PLL to multiply the 2MHz RC oscillator to 32MHz and switch the CPU core to run from it */ ++ XMEGACLK_StartPLL(CLOCK_SRC_INT_RC2MHZ, 2000000, F_CPU); ++ XMEGACLK_SetCPUClockSource(CLOCK_SRC_PLL); ++ ++ /* Start the 32MHz internal RC oscillator and start the DFLL to increase it to 48MHz using the USB SOF as a reference */ ++ XMEGACLK_StartInternalOscillator(CLOCK_SRC_INT_RC32MHZ); ++ XMEGACLK_StartDFLL(CLOCK_SRC_INT_RC32MHZ, DFLL_REF_INT_USBSOF, F_USB); ++ ++ PMIC.CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm; ++#endif ++ ++ /* Hardware Initialization */ ++ LEDs_Init(); ++ Joystick_Init(); ++ Buttons_Init(); ++ Dataflash_Init(); ++ USB_Init(); ++ ++ /* Check if the Dataflash is working, abort if not */ ++ if (!(DataflashManager_CheckDataflashOperation())) ++ { ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ for(;;); ++ } ++ ++ /* Clear Dataflash sector protections, if enabled */ ++ DataflashManager_ResetDataflashProtections(); ++} ++ ++/** 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) ++{ ++ bool ConfigSuccess = true; ++ ++ ConfigSuccess &= HID_Device_ConfigureEndpoints(&Keyboard_HID_Interface); ++ ConfigSuccess &= MS_Device_ConfigureEndpoints(&Disk_MS_Interface); ++ ++ USB_Device_EnableSOFEvents(); ++ ++ LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); ++} ++ ++/** Event handler for the library USB Control Request reception event. */ ++void EVENT_USB_Device_ControlRequest(void) ++{ ++ MS_Device_ProcessControlRequest(&Disk_MS_Interface); ++ HID_Device_ProcessControlRequest(&Keyboard_HID_Interface); ++} ++ ++/** Mass Storage class driver callback function the reception of SCSI commands from the host, which must be processed. ++ * ++ * \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface configuration structure being referenced ++ */ ++bool CALLBACK_MS_Device_SCSICommandReceived(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) ++{ ++ bool CommandSuccess; ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_BUSY); ++ CommandSuccess = SCSI_DecodeSCSICommand(MSInterfaceInfo); ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++ ++ return CommandSuccess; ++} ++ ++/** Event handler for the USB device Start Of Frame event. */ ++void EVENT_USB_Device_StartOfFrame(void) ++{ ++ HID_Device_MillisecondElapsed(&Keyboard_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[in] ReportType Type of the report to create, either HID_REPORT_ITEM_In or HID_REPORT_ITEM_Feature ++ * \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 \c true to force the sending of the report, \c 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, ++ const uint8_t ReportType, ++ void* ReportData, ++ uint16_t* const ReportSize) ++{ ++ USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData; ++ ++ uint8_t JoyStatus_LCL = Joystick_GetStatus(); ++ uint8_t ButtonStatus_LCL = Buttons_GetStatus(); ++ ++ KeyboardReport->Modifier = HID_KEYBOARD_MODIFIER_LEFTSHIFT; ++ ++ if (JoyStatus_LCL & JOY_UP) ++ KeyboardReport->KeyCode[0] = HID_KEYBOARD_SC_A; ++ else if (JoyStatus_LCL & JOY_DOWN) ++ KeyboardReport->KeyCode[0] = HID_KEYBOARD_SC_B; ++ ++ if (JoyStatus_LCL & JOY_LEFT) ++ KeyboardReport->KeyCode[0] = HID_KEYBOARD_SC_C; ++ else if (JoyStatus_LCL & JOY_RIGHT) ++ KeyboardReport->KeyCode[0] = HID_KEYBOARD_SC_D; ++ ++ if (JoyStatus_LCL & JOY_PRESS) ++ KeyboardReport->KeyCode[0] = HID_KEYBOARD_SC_E; ++ ++ if (ButtonStatus_LCL & BUTTONS_BUTTON1) ++ KeyboardReport->KeyCode[0] = HID_KEYBOARD_SC_F; ++ ++ *ReportSize = sizeof(USB_KeyboardReport_Data_t); ++ return false; ++} ++ ++/** 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] ReportType The type of report that the host has sent, either HID_REPORT_ITEM_Out or HID_REPORT_ITEM_Feature ++ * \param[in] ReportData Pointer to a buffer where the received 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 uint8_t ReportType, ++ const void* ReportData, ++ const uint16_t ReportSize) ++{ ++ uint8_t LEDMask = LEDS_NO_LEDS; ++ uint8_t* LEDReport = (uint8_t*)ReportData; ++ ++ if (*LEDReport & HID_KEYBOARD_LED_NUMLOCK) ++ LEDMask |= LEDS_LED1; ++ ++ if (*LEDReport & HID_KEYBOARD_LED_CAPSLOCK) ++ LEDMask |= LEDS_LED3; ++ ++ if (*LEDReport & HID_KEYBOARD_LED_SCROLLLOCK) ++ LEDMask |= LEDS_LED4; ++ ++ LEDs_SetAllLEDs(LEDMask); ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/MassStorageKeyboard/MassStorageKeyboard.h index 000000000,000000000..e122a4913 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/MassStorageKeyboard/MassStorageKeyboard.h @@@ -1,0 -1,0 +1,100 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ Copyright 2010 Matthias Hullin (lufa [at] matthias [dot] hullin [dot] net) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 MassStorageKeyboard.c. ++ */ ++ ++#ifndef _MASS_STORAGE_KEYBOARD_H_ ++#define _MASS_STORAGE_KEYBOARD_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <avr/interrupt.h> ++ #include <stdbool.h> ++ #include <string.h> ++ ++ #include "Descriptors.h" ++ ++ #include "Lib/SCSI.h" ++ #include "Lib/DataflashManager.h" ++ #include "Config/AppConfig.h" ++ ++ #include <LUFA/Drivers/Board/Joystick.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/Board/Buttons.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Platform/Platform.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) ++ ++ /** LED mask for the library LED driver, to indicate that the USB interface is busy. */ ++ #define LEDMASK_USB_BUSY LEDS_LED2 ++ ++ /* Function Prototypes: */ ++ void SetupHardware(void); ++ ++ void EVENT_USB_Device_Connect(void); ++ void EVENT_USB_Device_Disconnect(void); ++ void EVENT_USB_Device_ConfigurationChanged(void); ++ void EVENT_USB_Device_ControlRequest(void); ++ void EVENT_USB_Device_StartOfFrame(void); ++ ++ bool CALLBACK_MS_Device_SCSICommandReceived(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo); ++ ++ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, ++ uint8_t* const ReportID, ++ const uint8_t ReportType, ++ void* ReportData, ++ uint16_t* const ReportSize); ++ void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, ++ const uint8_t ReportID, ++ const uint8_t ReportType, ++ const void* ReportData, ++ const uint16_t ReportSize); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/MassStorageKeyboard/MassStorageKeyboard.txt index 000000000,000000000..d8b3b31db new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/MassStorageKeyboard/MassStorageKeyboard.txt @@@ -1,0 -1,0 +1,100 @@@ ++/** \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 Mass Storage and Keyboard Device Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * \li Series 6 USB AVRs (AT90USBxxx6) ++ * \li Series 4 USB AVRs (ATMEGAxxU4) ++ * \li Series 2 USB AVRs (AT90USBxx2, ATMEGAxxU2) ++ * \li Series AU XMEGA AVRs (ATXMEGAxxxAxU) ++ * \li Series B XMEGA AVRs (ATXMEGAxxxBx) ++ * \li Series C XMEGA AVRs (ATXMEGAxxxCx) ++ * ++ * \section Sec_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 Classes:</b></td> ++ * <td>Mass Storage Device \n ++ * Human Interface Device</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclasses:</b></td> ++ * <td>Bulk-Only Transport \n ++ * Keyboard Subclass</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF Mass Storage Standard \n ++ * USB Bulk-Only Transport Standard \n ++ * SCSI Primary Commands Specification \n ++ * SCSI Block Commands Specification \n ++ * USBIF HID Specification \n ++ * USBIF HID Usage Tables</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Combined Mass Storage and Keyboard demonstration application. This gives a ++ * simple reference application for implementing a dual class USB Mass Storage ++ * and USB HID Keyboard device using the basic USB UFI and HID drivers in all ++ * modern OSes (i.e. no special drivers required). ++ * ++ * On start-up the system will automatically enumerate and function as an ++ * external mass storage device (which may be formatted and used in the same ++ * manner as commercial USB Mass Storage devices) and a USB keyboard. ++ * ++ * You will need to format the mass storage drive upon first run of this ++ * demonstration - as the device acts only as a data block transport between ++ * the host and the storage media, it does not matter what file system is used, ++ * as the data interpretation is performed by the host and not the USB device. ++ * ++ * Keys on the USB keyboard can be pressed by moving the board's Joystick. ++ * ++ * The USB control endpoint is managed entirely by the library using endpoint ++ * interrupts, as the INTERRUPT_CONTROL_ENDPOINT option is enabled. This allows for ++ * the host to reset the Mass Storage device state during long transfers without ++ * the need for complicated polling logic. ++ * ++ * \section Sec_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> ++ * <th><b>Define Name:</b></th> ++ * <th><b>Location:</b></th> ++ * <th><b>Description:</b></th> ++ * </tr> ++ * <tr> ++ * <td>TOTAL_LUNS</td> ++ * <td>AppConfig.h</td> ++ * <td>Total number of Logical Units (drives) in the device. The total device capacity is shared equally between each drive - ++ * this can be set to any positive non-zero amount.</td> ++ * </tr> ++ * <tr> ++ * <td>DISK_READ_ONLY</td> ++ * <td>AppConfig.h</td> ++ * <td>Configuration define, indicating if the disk should be write protected or not.</td> ++ * </tr> ++ */ ++ diff --cc lib/lufa/Demos/Device/ClassDriver/MassStorageKeyboard/asf.xml index 000000000,000000000..3cdb476b2 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/MassStorageKeyboard/asf.xml @@@ -1,0 -1,0 +1,70 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Mass Storage and HID Keyboard Device Demo (Class Driver APIs)" id="lufa.demos.device.class.mass_storage_keyboard.example.avr8"> ++ <require idref="lufa.demos.device.class.mass_storage_keyboard"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <project caption="Mass Storage and HID Keyboard Device Demo (Class Driver APIs)" id="lufa.demos.device.class.mass_storage_keyboard.example.xmega"> ++ <require idref="lufa.demos.device.class.mass_storage_keyboard"/> ++ <require idref="lufa.boards.dummy.xmega"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atxmega128a1u"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="32000000UL"/> ++ <build type="define" name="F_USB" value="48000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.device.class.mass_storage_keyboard" caption="Mass Storage and HID Keyboard Device Demo (Class Driver APIs)"> ++ <info type="description" value="summary"> ++ Mass Storage and Keyboard device demo, implementing a basic USB storage disk using a Dataflash memory IC, and a basic HID keyboard. This demo uses the user-friendly USB Class Driver APIs to provide a simple, abstracted interface into the USB stack. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Low Level APIs"/> ++ <keyword value="USB Device"/> ++ <keyword value="HID Class"/> ++ <keyword value="Mass Storage Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="MassStorageKeyboard.txt"/> ++ ++ <build type="c-source" value="MassStorageKeyboard.c"/> ++ <build type="c-source" value="Descriptors.c"/> ++ <build type="c-source" value="Lib/DataflashManager.c"/> ++ <build type="c-source" value="Lib/SCSI.c"/> ++ <build type="header-file" value="MassStorageKeyboard.h"/> ++ <build type="header-file" value="Descriptors.h"/> ++ <build type="header-file" value="Lib/DataflashManager.h"/> ++ <build type="header-file" value="Lib/SCSI.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="module-config" subtype="required-header-file" value="AppConfig.h"/> ++ <build type="header-file" value="Config/AppConfig.h"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ <require idref="lufa.drivers.board.buttons"/> ++ <require idref="lufa.drivers.board.joystick"/> ++ <require idref="lufa.drivers.board.dataflash"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Device/ClassDriver/MassStorageKeyboard/doxyfile index 000000000,000000000..7f0c541ba new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/MassStorageKeyboard/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Combined Mass Storage and Keyboard 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Device/ClassDriver/MassStorageKeyboard/makefile index 000000000,000000000..4768cfc9b new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/MassStorageKeyboard/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = MassStorageKeyboard ++SRC = $(TARGET).c Descriptors.c Lib/DataflashManager.c Lib/SCSI.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Device/ClassDriver/Mouse/Config/LUFAConfig.h index 000000000,000000000..299d2ec85 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/Mouse/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,126 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++ #define USB_DEVICE_ONLY ++// #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #elif (ARCH == ARCH_XMEGA) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_RC32MCLKSRC | USB_OPT_BUSEVENT_PRIHIGH) ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++ #define MAX_ENDPOINT_INDEX 1 ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Device/ClassDriver/Mouse/Descriptors.c index 000000000,000000000..af08f81cf new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/Mouse/Descriptors.c @@@ -1,0 -1,0 +1,221 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special ++ * computer-readable structures which the host requests upon device enumeration, to determine ++ * the device's capabilities and functions. ++ */ ++ ++#include "Descriptors.h" ++ ++/** HID class report descriptor. This is a special descriptor constructed with values from the ++ * USBIF HID class specification to describe the reports and capabilities of the HID device. This ++ * descriptor is parsed by the host and its contents used to determine what data (and in what encoding) ++ * the device will send, and what it may be sent back from the host. Refer to the HID specification for ++ * more details on HID report descriptors. ++ */ ++const USB_Descriptor_HIDReport_Datatype_t PROGMEM MouseReport[] = ++{ ++ /* Use the HID class driver's standard Mouse report. ++ * Min X/Y Axis values: -1 ++ * Max X/Y Axis values: 1 ++ * Min physical X/Y Axis values (used to determine resolution): -1 ++ * Max physical X/Y Axis values (used to determine resolution): 1 ++ * Buttons: 3 ++ * Absolute screen coordinates: false ++ */ ++ HID_DESCRIPTOR_MOUSE(-1, 1, -1, 1, 3, false) ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = ++{ ++ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, ++ ++ .USBSpecification = VERSION_BCD(1,1,0), ++ .Class = USB_CSCP_NoDeviceClass, ++ .SubClass = USB_CSCP_NoDeviceSubclass, ++ .Protocol = USB_CSCP_NoDeviceProtocol, ++ ++ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, ++ ++ .VendorID = 0x03EB, ++ .ProductID = 0x2041, ++ .ReleaseNumber = VERSION_BCD(0,0,1), ++ ++ .ManufacturerStrIndex = STRING_ID_Manufacturer, ++ .ProductStrIndex = STRING_ID_Product, ++ .SerialNumStrIndex = NO_DESCRIPTOR, ++ ++ .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. ++ */ ++const 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 = 1, ++ ++ .ConfigurationNumber = 1, ++ .ConfigurationStrIndex = NO_DESCRIPTOR, ++ ++ .ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED), ++ ++ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) ++ }, ++ ++ .HID_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_Mouse, ++ .AlternateSetting = 0x00, ++ ++ .TotalEndpoints = 1, ++ ++ .Class = HID_CSCP_HIDClass, ++ .SubClass = HID_CSCP_BootSubclass, ++ .Protocol = HID_CSCP_MouseBootProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .HID_MouseHID = ++ { ++ .Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID}, ++ ++ .HIDSpec = VERSION_BCD(1,1,1), ++ .CountryCode = 0x00, ++ .TotalReportDescriptors = 1, ++ .HIDReportType = HID_DTYPE_Report, ++ .HIDReportLength = sizeof(MouseReport) ++ }, ++ ++ .HID_ReportINEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = MOUSE_EPADDR, ++ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = MOUSE_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ } ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_String_t PROGMEM LanguageString = USB_STRING_DESCRIPTOR_ARRAY(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"LUFA 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 uint16_t wIndex, ++ const void** const DescriptorAddress) ++{ ++ const uint8_t DescriptorType = (wValue >> 8); ++ const uint8_t DescriptorNumber = (wValue & 0xFF); ++ ++ const void* Address = NULL; ++ uint16_t Size = NO_DESCRIPTOR; ++ ++ switch (DescriptorType) ++ { ++ case DTYPE_Device: ++ Address = &DeviceDescriptor; ++ Size = sizeof(USB_Descriptor_Device_t); ++ break; ++ case DTYPE_Configuration: ++ Address = &ConfigurationDescriptor; ++ Size = sizeof(USB_Descriptor_Configuration_t); ++ break; ++ case DTYPE_String: ++ switch (DescriptorNumber) ++ { ++ case STRING_ID_Language: ++ Address = &LanguageString; ++ Size = pgm_read_byte(&LanguageString.Header.Size); ++ break; ++ case STRING_ID_Manufacturer: ++ Address = &ManufacturerString; ++ Size = pgm_read_byte(&ManufacturerString.Header.Size); ++ break; ++ case STRING_ID_Product: ++ Address = &ProductString; ++ Size = pgm_read_byte(&ProductString.Header.Size); ++ break; ++ } ++ ++ break; ++ case HID_DTYPE_HID: ++ Address = &ConfigurationDescriptor.HID_MouseHID; ++ Size = sizeof(USB_HID_Descriptor_HID_t); ++ break; ++ case HID_DTYPE_Report: ++ Address = &MouseReport; ++ Size = sizeof(MouseReport); ++ break; ++ } ++ ++ *DescriptorAddress = Address; ++ return Size; ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/Mouse/Descriptors.h index 000000000,000000000..b3fc96890 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/Mouse/Descriptors.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * Header file for Descriptors.c. ++ */ ++ ++#ifndef _DESCRIPTORS_H_ ++#define _DESCRIPTORS_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include <avr/pgmspace.h> ++ ++ /* Macros: */ ++ /** Endpoint address of the Mouse HID reporting IN endpoint. */ ++ #define MOUSE_EPADDR (ENDPOINT_DIR_IN | 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; ++ ++ // Mouse HID Interface ++ USB_Descriptor_Interface_t HID_Interface; ++ USB_HID_Descriptor_HID_t HID_MouseHID; ++ USB_Descriptor_Endpoint_t HID_ReportINEndpoint; ++ } USB_Descriptor_Configuration_t; ++ ++ /** Enum for the device interface descriptor IDs within the device. Each interface descriptor ++ * should have a unique ID index associated with it, which can be used to refer to the ++ * interface from other descriptors. ++ */ ++ enum InterfaceDescriptors_t ++ { ++ INTERFACE_ID_Mouse = 0, /**< Mouse interface descriptor ID */ ++ }; ++ ++ /** Enum for the device string descriptor IDs within the device. Each string descriptor should ++ * have a unique ID index associated with it, which can be used to refer to the string from ++ * other descriptors. ++ */ ++ enum StringDescriptors_t ++ { ++ STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */ ++ STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */ ++ STRING_ID_Product = 2, /**< Product string ID */ ++ }; ++ ++ /* Function Prototypes: */ ++ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ++ const uint16_t wIndex, ++ const void** const DescriptorAddress) ++ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/Mouse/Mouse.c index 000000000,000000000..475fb62ad new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/Mouse/Mouse.c @@@ -1,0 -1,0 +1,202 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 Mouse demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "Mouse.h" ++ ++/** Buffer to hold the previously generated Mouse HID report, for comparison purposes inside the HID class driver. */ ++static 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 = INTERFACE_ID_Mouse, ++ .ReportINEndpoint = ++ { ++ .Address = MOUSE_EPADDR, ++ .Size = MOUSE_EPSIZE, ++ .Banks = 1, ++ }, ++ .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); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ HID_Device_USBTask(&Mouse_HID_Interface); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#elif (ARCH == ARCH_XMEGA) ++ /* Start the PLL to multiply the 2MHz RC oscillator to 32MHz and switch the CPU core to run from it */ ++ XMEGACLK_StartPLL(CLOCK_SRC_INT_RC2MHZ, 2000000, F_CPU); ++ XMEGACLK_SetCPUClockSource(CLOCK_SRC_PLL); ++ ++ /* Start the 32MHz internal RC oscillator and start the DFLL to increase it to 48MHz using the USB SOF as a reference */ ++ XMEGACLK_StartInternalOscillator(CLOCK_SRC_INT_RC32MHZ); ++ XMEGACLK_StartDFLL(CLOCK_SRC_INT_RC32MHZ, DFLL_REF_INT_USBSOF, F_USB); ++ ++ PMIC.CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm; ++#endif ++ ++ /* Hardware Initialization */ ++ Joystick_Init(); ++ LEDs_Init(); ++ Buttons_Init(); ++ USB_Init(); ++} ++ ++/** 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) ++{ ++ bool ConfigSuccess = true; ++ ++ ConfigSuccess &= HID_Device_ConfigureEndpoints(&Mouse_HID_Interface); ++ ++ USB_Device_EnableSOFEvents(); ++ ++ LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); ++} ++ ++/** Event handler for the library USB Control Request reception event. */ ++void EVENT_USB_Device_ControlRequest(void) ++{ ++ 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[in] ReportType Type of the report to create, either HID_REPORT_ITEM_In or HID_REPORT_ITEM_Feature ++ * \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 \c true to force the sending of the report, \c 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, ++ const uint8_t ReportType, ++ void* ReportData, ++ uint16_t* const 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_LEFT) ++ MouseReport->X = -1; ++ else if (JoyStatus_LCL & JOY_RIGHT) ++ 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] ReportType The type of report that the host has sent, either HID_REPORT_ITEM_Out or HID_REPORT_ITEM_Feature ++ * \param[in] ReportData Pointer to a buffer where the received 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 uint8_t ReportType, ++ 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 ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/Mouse/Mouse.h index 000000000,000000000..62bf47d7b new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/Mouse/Mouse.h @@@ -1,0 -1,0 +1,90 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 Mouse.c. ++ */ ++ ++#ifndef _MOUSE_H_ ++#define _MOUSE_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/interrupt.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <stdbool.h> ++ #include <string.h> ++ ++ #include "Descriptors.h" ++ ++ #include <LUFA/Drivers/Board/Joystick.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/Board/Buttons.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Platform/Platform.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 EVENT_USB_Device_Connect(void); ++ void EVENT_USB_Device_Disconnect(void); ++ void EVENT_USB_Device_ConfigurationChanged(void); ++ void EVENT_USB_Device_ControlRequest(void); ++ void EVENT_USB_Device_StartOfFrame(void); ++ ++ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, ++ uint8_t* const ReportID, ++ const uint8_t ReportType, ++ void* ReportData, ++ uint16_t* const ReportSize); ++ void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, ++ const uint8_t ReportID, ++ const uint8_t ReportType, ++ const void* ReportData, ++ const uint16_t ReportSize); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/Mouse/Mouse.txt index 000000000,000000000..dc65b8879 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/Mouse/Mouse.txt @@@ -1,0 -1,0 +1,76 @@@ ++/** \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 Mouse Device Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * \li Series 6 USB AVRs (AT90USBxxx6) ++ * \li Series 4 USB AVRs (ATMEGAxxU4) ++ * \li Series 2 USB AVRs (AT90USBxx2, ATMEGAxxU2) ++ * \li Series AU XMEGA AVRs (ATXMEGAxxxAxU) ++ * \li Series B XMEGA AVRs (ATXMEGAxxxBx) ++ * \li Series C XMEGA AVRs (ATXMEGAxxxCx) ++ * ++ * \section Sec_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>Human Interface Device (HID)</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>Mouse Subclass</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF HID Specification \n ++ * USBIF HID Usage Tables</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Low Speed Mode \n ++ * Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Mouse demonstration application. This gives a simple reference ++ * application for implementing a USB Mouse using the basic USB HID ++ * drivers in all modern OSes (i.e. no special drivers required). It is ++ * boot protocol compatible, and thus works under compatible BIOS as if ++ * it was a native mouse (e.g. PS/2). ++ * ++ * On start-up the system will automatically enumerate and function ++ * as a mouse when the USB connection to a host is present. To use ++ * the mouse, move the joystick to move the pointer, and push the ++ * joystick inwards to simulate a left-button click. The HWB serves as ++ * the right mouse button. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Device/ClassDriver/Mouse/asf.xml index 000000000,000000000..1af0d7667 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/Mouse/asf.xml @@@ -1,0 -1,0 +1,62 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Mouse HID Device Demo (Class Driver APIs)" id="lufa.demos.device.class.mouse.example.avr8"> ++ <require idref="lufa.demos.device.class.mouse"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <project caption="Mouse HID Device Demo (Class Driver APIs)" id="lufa.demos.device.class.mouse.example.xmega"> ++ <require idref="lufa.demos.device.class.mouse"/> ++ <require idref="lufa.boards.dummy.xmega"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atxmega128a1u"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="32000000UL"/> ++ <build type="define" name="F_USB" value="48000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.device.class.mouse" caption="Mouse HID Device Demo (Class Driver APIs)"> ++ <info type="description" value="summary"> ++ Mouse device demo, implementing a basic USB mouse device that can send movement information to the host. This demo uses the user-friendly USB Class Driver APIs to provide a simple, abstracted interface into the USB stack. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Class Driver APIs"/> ++ <keyword value="USB Device"/> ++ <keyword value="HID Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="Mouse.txt"/> ++ ++ <build type="c-source" value="Mouse.c"/> ++ <build type="c-source" value="Descriptors.c"/> ++ <build type="header-file" value="Mouse.h"/> ++ <build type="header-file" value="Descriptors.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ <require idref="lufa.drivers.board.buttons"/> ++ <require idref="lufa.drivers.board.joystick"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Device/ClassDriver/Mouse/doxyfile index 000000000,000000000..37bc83018 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/Mouse/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Device/ClassDriver/Mouse/makefile index 000000000,000000000..0ca85b318 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/Mouse/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = Mouse ++SRC = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Config/AppConfig.h index 000000000,000000000..0e4d1780a new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Config/AppConfig.h @@@ -1,0 -1,0 +1,60 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief Application Configuration Header File ++ * ++ * This is a header file which is be used to configure some of ++ * the application's compile time options, as an alternative to ++ * specifying the compile time constants supplied through a ++ * makefile or build system. ++ * ++ * For information on what each token does, refer to the ++ * \ref Sec_Options section of the application documentation. ++ */ ++ ++#ifndef _APP_CONFIG_H_ ++#define _APP_CONFIG_H_ ++ ++ #define CLIENT_IP_ADDRESS { 10, 0, 0, 1} ++ #define SERVER_IP_ADDRESS { 10, 0, 0, 2} ++ ++ #define ADAPTER_MAC_ADDRESS {0x02, 0x00, 0x02, 0x00, 0x02, 0x00} ++ #define SERVER_MAC_ADDRESS {0x00, 0x01, 0x00, 0x01, 0x00, 0x01} ++ ++ #define NO_DECODE_ETHERNET ++ #define NO_DECODE_ARP ++ #define NO_DECODE_IP ++ #define NO_DECODE_ICMP ++ #define NO_DECODE_TCP ++ #define NO_DECODE_UDP ++ #define NO_DECODE_DHCP ++ ++#endif diff --cc lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Config/LUFAConfig.h index 000000000,000000000..cc828a108 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,126 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++ #define USB_DEVICE_ONLY ++// #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #elif (ARCH == ARCH_XMEGA) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_RC32MCLKSRC | USB_OPT_BUSEVENT_PRIHIGH) ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++ #define MAX_ENDPOINT_INDEX 3 ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Descriptors.c index 000000000,000000000..e42b31860 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Descriptors.c @@@ -1,0 -1,0 +1,244 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special ++ * computer-readable structures which the host requests upon device enumeration, to determine ++ * the device's capabilities and functions. ++ */ ++ ++#include "Descriptors.h" ++ ++/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall ++ * device characteristics, including the supported USB version, control endpoint size and the ++ * number of device configurations. The descriptor is read out by the USB host when the enumeration ++ * process begins. ++ */ ++const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = ++{ ++ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, ++ ++ .USBSpecification = VERSION_BCD(1,1,0), ++ .Class = CDC_CSCP_CDCClass, ++ .SubClass = CDC_CSCP_NoSpecificSubclass, ++ .Protocol = CDC_CSCP_NoSpecificProtocol, ++ ++ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, ++ ++ .VendorID = 0x03EB, ++ .ProductID = 0x204C, ++ .ReleaseNumber = VERSION_BCD(0,0,1), ++ ++ .ManufacturerStrIndex = STRING_ID_Manufacturer, ++ .ProductStrIndex = STRING_ID_Product, ++ .SerialNumStrIndex = NO_DESCRIPTOR, ++ ++ .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. ++ */ ++const 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 = 2, ++ ++ .ConfigurationNumber = 1, ++ .ConfigurationStrIndex = NO_DESCRIPTOR, ++ ++ .ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED), ++ ++ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) ++ }, ++ ++ .CDC_CCI_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_CDC_CCI, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 1, ++ ++ .Class = CDC_CSCP_CDCClass, ++ .SubClass = CDC_CSCP_ACMSubclass, ++ .Protocol = CDC_CSCP_VendorSpecificProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .CDC_Functional_Header = ++ { ++ .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface}, ++ .Subtype = CDC_DSUBTYPE_CSInterface_Header, ++ ++ .CDCSpecification = VERSION_BCD(1,1,0), ++ }, ++ ++ .CDC_Functional_ACM = ++ { ++ .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface}, ++ .Subtype = CDC_DSUBTYPE_CSInterface_ACM, ++ ++ .Capabilities = 0x00, ++ }, ++ ++ .CDC_Functional_Union = ++ { ++ .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface}, ++ .Subtype = CDC_DSUBTYPE_CSInterface_Union, ++ ++ .MasterInterfaceNumber = INTERFACE_ID_CDC_CCI, ++ .SlaveInterfaceNumber = INTERFACE_ID_CDC_DCI, ++ }, ++ ++ .CDC_NotificationEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = CDC_NOTIFICATION_EPADDR, ++ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = CDC_NOTIFICATION_EPSIZE, ++ .PollingIntervalMS = 0xFF ++ }, ++ ++ .CDC_DCI_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_CDC_DCI, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 2, ++ ++ .Class = CDC_CSCP_CDCDataClass, ++ .SubClass = CDC_CSCP_NoDataSubclass, ++ .Protocol = CDC_CSCP_NoDataProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .RNDIS_DataOutEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = CDC_RX_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = CDC_TXRX_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++ ++ .RNDIS_DataInEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = CDC_TX_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = CDC_TXRX_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ } ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_String_t PROGMEM LanguageString = USB_STRING_DESCRIPTOR_ARRAY(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"LUFA RNDIS CDC 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 uint16_t wIndex, ++ const void** const DescriptorAddress) ++{ ++ const uint8_t DescriptorType = (wValue >> 8); ++ const uint8_t DescriptorNumber = (wValue & 0xFF); ++ ++ const void* Address = NULL; ++ uint16_t Size = NO_DESCRIPTOR; ++ ++ switch (DescriptorType) ++ { ++ case DTYPE_Device: ++ Address = &DeviceDescriptor; ++ Size = sizeof(USB_Descriptor_Device_t); ++ break; ++ case DTYPE_Configuration: ++ Address = &ConfigurationDescriptor; ++ Size = sizeof(USB_Descriptor_Configuration_t); ++ break; ++ case DTYPE_String: ++ switch (DescriptorNumber) ++ { ++ case STRING_ID_Language: ++ Address = &LanguageString; ++ Size = pgm_read_byte(&LanguageString.Header.Size); ++ break; ++ case STRING_ID_Manufacturer: ++ Address = &ManufacturerString; ++ Size = pgm_read_byte(&ManufacturerString.Header.Size); ++ break; ++ case STRING_ID_Product: ++ Address = &ProductString; ++ Size = pgm_read_byte(&ProductString.Header.Size); ++ break; ++ } ++ ++ break; ++ } ++ ++ *DescriptorAddress = Address; ++ return Size; ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Descriptors.h index 000000000,000000000..866ccd61a new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Descriptors.h @@@ -1,0 -1,0 +1,112 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * Header file for Descriptors.c. ++ */ ++ ++#ifndef _DESCRIPTORS_H_ ++#define _DESCRIPTORS_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include <avr/pgmspace.h> ++ ++ #include "Config/AppConfig.h" ++ ++ /* Macros: */ ++ /** Endpoint address of the CDC device-to-host notification IN endpoint. */ ++ #define CDC_NOTIFICATION_EPADDR (ENDPOINT_DIR_IN | 3) ++ ++ /** Endpoint address of the CDC device-to-host data IN endpoint. */ ++ #define CDC_TX_EPADDR (ENDPOINT_DIR_IN | 1) ++ ++ /** Endpoint address of the CDC host-to-device data OUT endpoint. */ ++ #define CDC_RX_EPADDR (ENDPOINT_DIR_OUT | 2) ++ ++ /** 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 64 ++ ++ /* 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; ++ ++ // RNDIS CDC Control Interface ++ USB_Descriptor_Interface_t CDC_CCI_Interface; ++ USB_CDC_Descriptor_FunctionalHeader_t CDC_Functional_Header; ++ USB_CDC_Descriptor_FunctionalACM_t CDC_Functional_ACM; ++ USB_CDC_Descriptor_FunctionalUnion_t CDC_Functional_Union; ++ USB_Descriptor_Endpoint_t CDC_NotificationEndpoint; ++ ++ // RNDIS CDC Data Interface ++ USB_Descriptor_Interface_t CDC_DCI_Interface; ++ USB_Descriptor_Endpoint_t RNDIS_DataOutEndpoint; ++ USB_Descriptor_Endpoint_t RNDIS_DataInEndpoint; ++ } USB_Descriptor_Configuration_t; ++ ++ /** Enum for the device interface descriptor IDs within the device. Each interface descriptor ++ * should have a unique ID index associated with it, which can be used to refer to the ++ * interface from other descriptors. ++ */ ++ enum InterfaceDescriptors_t ++ { ++ INTERFACE_ID_CDC_CCI = 0, /**< CDC CCI interface descriptor ID */ ++ INTERFACE_ID_CDC_DCI = 1, /**< CDC DCI interface descriptor ID */ ++ }; ++ ++ /** Enum for the device string descriptor IDs within the device. Each string descriptor should ++ * have a unique ID index associated with it, which can be used to refer to the string from ++ * other descriptors. ++ */ ++ enum StringDescriptors_t ++ { ++ STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */ ++ STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */ ++ STRING_ID_Product = 2, /**< Product string ID */ ++ }; ++ ++ /* Function Prototypes: */ ++ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ++ const uint16_t wIndex, ++ const void** const DescriptorAddress) ++ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/LUFA RNDIS.inf index 000000000,000000000..f34e55f99 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/LUFA RNDIS.inf @@@ -1,0 -1,0 +1,59 @@@ ++; Windows LUFA RNDIS Setup File ++; Copyright (c) 2000 Microsoft Corporation ++ ++[DefaultInstall] ++CopyINF="LUFA RNDIS.inf" ++ ++[Version] ++Signature="$Windows NT$" ++Class=Net ++ClassGuid={4d36e972-e325-11ce-bfc1-08002be10318} ++Provider=%MFGNAME% ++DriverVer=7/1/2012,10.0.0.0 ++ ++[Manufacturer] ++%MFGNAME%=DeviceList, NTx86, NTamd64, NTia64 ++ ++[ControlFlags] ++ExcludeFromSelect=* ++ ++[DriverInstall] ++Characteristics=0x84 ; NCF_PHYSICAL + NCF_HAS_UI ++BusType=15 ++include=netrndis.inf ++needs=Usb_Rndis.ndi ++AddReg=Rndis_AddReg_Vista ++ ++[DriverInstall.Services] ++include=netrndis.inf ++needs=Usb_Rndis.ndi.Services ++ ++;------------------------------------------------------------------------------ ++; 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. ++;------------------------------------------------------------------------------ ++[DeviceList] ++%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_204C ++ ++[DeviceList.NTx86] ++%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_204C ++ ++[DeviceList.NTamd64] ++%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_204C ++ ++[DeviceList.NTia64] ++%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_204C ++ ++;------------------------------------------------------------------------------ ++; String Definitions ++;------------------------------------------------------------------------------ ++;Modify these strings to customize your device ++;------------------------------------------------------------------------------ ++[Strings] ++MFGNAME="http://www.lufa-lib.org" ++DESCRIPTION="LUFA USB RNDIS Demo" diff --cc lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/ARP.c index 000000000,000000000..518ba8c6a new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/ARP.c @@@ -1,0 -1,0 +1,87 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * Address Resolution Protocol (ARP) packet handling routines. This protocol handles the ++ * conversion of physical MAC addresses to protocol IP addresses between the host and the ++ * device. ++ */ ++ ++#include "ARP.h" ++ ++/** Processes an ARP packet inside an Ethernet frame, and writes the appropriate response ++ * to the output Ethernet frame if the host is requesting the IP or MAC address of the ++ * virtual server device on the network. ++ * ++ * \param[in] InDataStart Pointer to the start of the incoming packet's ARP header ++ * \param[out] OutDataStart Pointer to the start of the outgoing packet's ARP header ++ * ++ * \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise ++ */ ++int16_t ARP_ProcessARPPacket(void* InDataStart, ++ void* OutDataStart) ++{ ++ DecodeARPHeader(InDataStart); ++ ++ ARP_Header_t* ARPHeaderIN = (ARP_Header_t*)InDataStart; ++ ARP_Header_t* ARPHeaderOUT = (ARP_Header_t*)OutDataStart; ++ ++ /* Ensure that the ARP request is a IPv4 request packet */ ++ if ((SwapEndian_16(ARPHeaderIN->ProtocolType) == ETHERTYPE_IPV4) && ++ (SwapEndian_16(ARPHeaderIN->Operation) == ARP_OPERATION_REQUEST)) ++ { ++ /* If the ARP packet is requesting the MAC or IP of the virtual webserver, return the response */ ++ if (IP_COMPARE(&ARPHeaderIN->TPA, &ServerIPAddress) || ++ MAC_COMPARE(&ARPHeaderIN->THA, &ServerMACAddress)) ++ { ++ /* Fill out the ARP response header */ ++ ARPHeaderOUT->HardwareType = ARPHeaderIN->HardwareType; ++ ARPHeaderOUT->ProtocolType = ARPHeaderIN->ProtocolType; ++ ARPHeaderOUT->HLEN = ARPHeaderIN->HLEN; ++ ARPHeaderOUT->PLEN = ARPHeaderIN->PLEN; ++ ARPHeaderOUT->Operation = SwapEndian_16(ARP_OPERATION_REPLY); ++ ++ /* Copy over the sender MAC/IP to the target fields for the response */ ++ ARPHeaderOUT->THA = ARPHeaderIN->SHA; ++ ARPHeaderOUT->TPA = ARPHeaderIN->SPA; ++ ++ /* Copy over the new sender MAC/IP - MAC and IP addresses of the virtual webserver */ ++ ARPHeaderOUT->SHA = ServerMACAddress; ++ ARPHeaderOUT->SPA = ServerIPAddress; ++ ++ /* Return the size of the response so far */ ++ return sizeof(ARP_Header_t); ++ } ++ } ++ ++ return NO_RESPONSE; ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/ARP.h index 000000000,000000000..e64c38ec5 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/ARP.h @@@ -1,0 -1,0 +1,76 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ARP.c. ++ */ ++ ++#ifndef _ARP_H_ ++#define _ARP_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <string.h> ++ ++ #include "EthernetProtocols.h" ++ #include "Ethernet.h" ++ #include "ProtocolDecoders.h" ++ ++ /* Macros: */ ++ /** ARP header operation constant, indicating a request from a host for an address translation. */ ++ #define ARP_OPERATION_REQUEST 1 ++ ++ /** ARP header operation constant, indicating a reply from a host giving an address translation. */ ++ #define ARP_OPERATION_REPLY 2 ++ ++ /* Type Defines: */ ++ /** Type define for an ARP packet inside an Ethernet frame. */ ++ typedef struct ++ { ++ uint16_t HardwareType; /**< Hardware type constant, indicating the hardware used */ ++ uint16_t ProtocolType; /**< Protocol being resolved, usually ETHERTYPE_IPV4 */ ++ ++ uint8_t HLEN; /**< Length in bytes of the source/destination hardware addresses */ ++ uint8_t PLEN; /**< Length in bytes of the source/destination protocol addresses */ ++ uint16_t Operation; /**< Type of operation, either ARP_OPERATION_REQUEST or ARP_OPERATION_REPLY */ ++ ++ MAC_Address_t SHA; /**< Sender's hardware address */ ++ IP_Address_t SPA; /**< Sender's protocol address */ ++ MAC_Address_t THA; /**< Target's hardware address */ ++ IP_Address_t TPA; /**< Target's protocol address */ ++ } ARP_Header_t; ++ ++ /* Function Prototypes: */ ++ int16_t ARP_ProcessARPPacket(void* InDataStart, ++ void* OutDataStart); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/DHCP.c index 000000000,000000000..7adc64836 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/DHCP.c @@@ -1,0 -1,0 +1,129 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * Dynamic Host Configuration Protocol (DHCP) packet handling routines. This protocol ++ * handles the automatic IP negotiation to the host, so that the host will use the provided ++ * IP address given to it by the device. ++ */ ++ ++#include "DHCP.h" ++ ++/** Processes a DHCP packet inside an Ethernet frame, and writes the appropriate response ++ * to the output Ethernet frame if the host is requesting or accepting an IP address. ++ * ++ * \param[in] IPHeaderInStart Pointer to the start of the incoming packet's IP header ++ * \param[in] DHCPHeaderInStart Pointer to the start of the incoming packet's DHCP header ++ * \param[out] DHCPHeaderOutStart Pointer to the start of the outgoing packet's DHCP header ++ * ++ * \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise ++ */ ++int16_t DHCP_ProcessDHCPPacket(void* IPHeaderInStart, ++ void* DHCPHeaderInStart, ++ void* DHCPHeaderOutStart) ++{ ++ IP_Header_t* IPHeaderIN = (IP_Header_t*)IPHeaderInStart; ++ DHCP_Header_t* DHCPHeaderIN = (DHCP_Header_t*)DHCPHeaderInStart; ++ DHCP_Header_t* DHCPHeaderOUT = (DHCP_Header_t*)DHCPHeaderOutStart; ++ ++ uint8_t* DHCPOptionsINStart = ((uint8_t*)DHCPHeaderInStart + sizeof(DHCP_Header_t)); ++ uint8_t* DHCPOptionsOUTStart = ((uint8_t*)DHCPHeaderOutStart + sizeof(DHCP_Header_t)); ++ ++ DecodeDHCPHeader(DHCPHeaderInStart); ++ ++ /* Zero out the response DHCP packet, as much of it is legacy and left at 0 */ ++ memset(DHCPHeaderOUT, 0, sizeof(DHCP_Header_t)); ++ ++ /* Fill out the response DHCP packet */ ++ DHCPHeaderOUT->HardwareType = DHCPHeaderIN->HardwareType; ++ DHCPHeaderOUT->Operation = DHCP_OP_BOOTREPLY; ++ DHCPHeaderOUT->HardwareAddressLength = DHCPHeaderIN->HardwareAddressLength; ++ DHCPHeaderOUT->Hops = 0; ++ DHCPHeaderOUT->TransactionID = DHCPHeaderIN->TransactionID; ++ DHCPHeaderOUT->ElapsedSeconds = 0; ++ DHCPHeaderOUT->Flags = DHCPHeaderIN->Flags; ++ DHCPHeaderOUT->YourIP = ClientIPAddress; ++ memmove(&DHCPHeaderOUT->ClientHardwareAddress, &DHCPHeaderIN->ClientHardwareAddress, sizeof(MAC_Address_t)); ++ DHCPHeaderOUT->Cookie = SwapEndian_32(DHCP_MAGIC_COOKIE); ++ ++ /* Alter the incoming IP packet header so that the corrected IP source and destinations are used - this means that ++ when the response IP header is generated, it will use the corrected addresses and not the null/broatcast addresses */ ++ IPHeaderIN->SourceAddress = ClientIPAddress; ++ IPHeaderIN->DestinationAddress = ServerIPAddress; ++ ++ /* Process the incoming DHCP packet options */ ++ while (DHCPOptionsINStart[0] != DHCP_OPTION_END) ++ { ++ /* Find the Message Type DHCP option, to determine the type of DHCP packet */ ++ if (DHCPOptionsINStart[0] == DHCP_OPTION_MESSAGETYPE) ++ { ++ if ((DHCPOptionsINStart[2] == DHCP_MESSAGETYPE_DISCOVER) || (DHCPOptionsINStart[2] == DHCP_MESSAGETYPE_REQUEST)) ++ { ++ /* Fill out the response DHCP packet options for a DHCP OFFER or ACK response */ ++ ++ *(DHCPOptionsOUTStart++) = DHCP_OPTION_MESSAGETYPE; ++ *(DHCPOptionsOUTStart++) = 1; ++ *(DHCPOptionsOUTStart++) = (DHCPOptionsINStart[2] == DHCP_MESSAGETYPE_DISCOVER) ? DHCP_MESSAGETYPE_OFFER ++ : DHCP_MESSAGETYPE_ACK; ++ ++ *(DHCPOptionsOUTStart++) = DHCP_OPTION_SUBNETMASK; ++ *(DHCPOptionsOUTStart++) = sizeof(IP_Address_t); ++ *(DHCPOptionsOUTStart++) = 0xFF; ++ *(DHCPOptionsOUTStart++) = 0xFF; ++ *(DHCPOptionsOUTStart++) = 0xFF; ++ *(DHCPOptionsOUTStart++) = 0x00; ++ ++ *(DHCPOptionsOUTStart++) = DHCP_OPTION_LEASETIME; ++ *(DHCPOptionsOUTStart++) = sizeof(uint32_t); ++ /* Lease Time 86400s (ONE_DAY) */ ++ *(DHCPOptionsOUTStart++) = 0x00; ++ *(DHCPOptionsOUTStart++) = 0x01; ++ *(DHCPOptionsOUTStart++) = 0x51; ++ *(DHCPOptionsOUTStart++) = 0x80; ++ ++ *(DHCPOptionsOUTStart++) = DHCP_OPTION_DHCPSERVER; ++ *(DHCPOptionsOUTStart++) = sizeof(IP_Address_t); ++ memcpy(DHCPOptionsOUTStart, &ServerIPAddress, sizeof(IP_Address_t)); ++ DHCPOptionsOUTStart += sizeof(IP_Address_t); ++ ++ *(DHCPOptionsOUTStart++) = DHCP_OPTION_END; ++ ++ return (sizeof(DHCP_Header_t) + 18 + sizeof(IP_Address_t)); ++ } ++ } ++ ++ /* Go to the next DHCP option - skip one byte if option is a padding byte, else skip the complete option's size */ ++ DHCPOptionsINStart += ((DHCPOptionsINStart[0] == DHCP_OPTION_PAD) ? 1 : (DHCPOptionsINStart[1] + 2)); ++ } ++ ++ return NO_RESPONSE; ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/DHCP.h index 000000000,000000000..5ef78469e new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/DHCP.h @@@ -1,0 -1,0 +1,131 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 DHCP.c. ++ */ ++ ++#ifndef _DHCP_H_ ++#define _DHCP_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <string.h> ++ ++ #include "EthernetProtocols.h" ++ #include "Ethernet.h" ++ #include "ProtocolDecoders.h" ++ ++ /* Macros: */ ++ /** DHCP operation constant, indicating a request from a host to a DHCP server. */ ++ #define DHCP_OP_BOOTREQUEST 0x01 ++ ++ /** DHCP operation constant, indicating a reply from a DHCP server to a host. */ ++ #define DHCP_OP_BOOTREPLY 0x02 ++ ++ /** Hardware type constant, indicating Ethernet as a carrier. */ ++ #define DHCP_HTYPE_ETHERNET 0x01 ++ ++ /** Magic boot protocol "cookie", inserted into all BOOTP packets (BOOTP is the carrier of DHCP). */ ++ #define DHCP_MAGIC_COOKIE 0x63825363 ++ ++ /** DHCP option list entry header, indicating that a subnet mask will follow. */ ++ #define DHCP_OPTION_SUBNETMASK 1 ++ ++ /** DHCP option list entry header, indicating that the Lease Time will follow. */ ++ #define DHCP_OPTION_LEASETIME 51 ++ ++ /** DHCP option list entry header, indicating that the DHCP message type constant will follow. */ ++ #define DHCP_OPTION_MESSAGETYPE 53 ++ ++ /** DHCP option list entry header, indicating that the IP address of the DHCP server will follow. */ ++ #define DHCP_OPTION_DHCPSERVER 54 ++ ++ /** DHCP option list entry header, used to pad out option data. */ ++ #define DHCP_OPTION_PAD 0 ++ ++ /** DHCP option list entry header, indicating the end of option data. */ ++ #define DHCP_OPTION_END 255 ++ ++ /** Message type constant, used in the DHCP option data field, requesting that a DHCP server offer an IP address. */ ++ #define DHCP_MESSAGETYPE_DISCOVER 1 ++ ++ /** Message type constant, used in the DHCP option data field, indicating that a DHCP server is offering an IP address. */ ++ #define DHCP_MESSAGETYPE_OFFER 2 ++ ++ /** Message type constant, used in the DHCP option data field, requesting that a DHCP server lease a given IP address. */ ++ #define DHCP_MESSAGETYPE_REQUEST 3 ++ ++ /** Message type constant, used in the DHCP option data field, declining an offered DHCP server IP address lease. */ ++ #define DHCP_MESSAGETYPE_DECLINE 4 ++ ++ /** Message type constant, used in the DHCP option data field, ACKing a host IP lease request. */ ++ #define DHCP_MESSAGETYPE_ACK 5 ++ ++ /** Message type constant, used in the DHCP option data field, NACKing a host IP lease request. */ ++ #define DHCP_MESSAGETYPE_NACK 6 ++ ++ /** Message type constant, used in the DHCP option data field, indicating that a host is releasing a leased IP address. */ ++ #define DHCP_MESSAGETYPE_RELEASE 7 ++ ++ /* Type Defines: */ ++ /** Type define for a DHCP packet inside an Ethernet frame. */ ++ typedef struct ++ { ++ uint8_t Operation; /**< DHCP operation, either DHCP_OP_BOOTREQUEST or DHCP_OP_BOOTREPLY */ ++ uint8_t HardwareType; /**< Hardware carrier type constant */ ++ uint8_t HardwareAddressLength; /**< Length in bytes of a hardware (MAC) address on the network */ ++ uint8_t Hops; /**< Number of hops required to reach the server, unused */ ++ ++ uint32_t TransactionID; /**< Unique ID of the DHCP packet, for positive matching between sent and received packets */ ++ ++ uint16_t ElapsedSeconds; /**< Elapsed seconds since the request was made */ ++ uint16_t Flags; /**< BOOTP packet flags */ ++ ++ IP_Address_t ClientIP; /**< Client IP address, if already leased an IP */ ++ IP_Address_t YourIP; /**< Client IP address */ ++ IP_Address_t NextServerIP; /**< Legacy BOOTP protocol field, unused for DHCP */ ++ IP_Address_t RelayAgentIP; /**< Legacy BOOTP protocol field, unused for DHCP */ ++ ++ uint8_t ClientHardwareAddress[16]; /**< Hardware (MAC) address of the client making a request to the DHCP server */ ++ uint8_t ServerHostnameString[64]; /**< Legacy BOOTP protocol field, unused for DHCP */ ++ uint8_t BootFileName[128]; /**< Legacy BOOTP protocol field, unused for DHCP */ ++ ++ uint32_t Cookie; /**< Magic BOOTP protocol cookie to indicate a valid packet */ ++ } DHCP_Header_t; ++ ++ /* Function Prototypes: */ ++ int16_t DHCP_ProcessDHCPPacket(void* IPHeaderInStart, ++ void* DHCPHeaderInStart, ++ void* DHCPHeaderOutStart); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/Ethernet.c index 000000000,000000000..c28fa2336 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/Ethernet.c @@@ -1,0 -1,0 +1,132 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * Ethernet frame packet handling routines. This protocol handles the processing of raw Ethernet ++ * frames sent and received, deferring the processing of sub-packet protocols to the appropriate ++ * protocol handlers, such as DHCP or ARP. ++ */ ++ ++#include "Ethernet.h" ++ ++/** Constant for convenience when checking against or setting a MAC address to the virtual server MAC address. */ ++const MAC_Address_t ServerMACAddress = {SERVER_MAC_ADDRESS}; ++ ++/** Constant for convenience when checking against or setting an IP address to the virtual server IP address. */ ++const IP_Address_t ServerIPAddress = {SERVER_IP_ADDRESS}; ++ ++/** Constant for convenience when checking against or setting a MAC address to the broadcast MAC address. */ ++const MAC_Address_t BroadcastMACAddress = {BROADCAST_MAC_ADDRESS}; ++ ++/** Constant for convenience when checking against or setting a IP address to the broadcast IP address. */ ++const IP_Address_t BroadcastIPAddress = {BROADCAST_IP_ADDRESS}; ++ ++/** Constant for convenience when checking against or setting an IP address to the client (host) IP address. */ ++const IP_Address_t ClientIPAddress = {CLIENT_IP_ADDRESS}; ++ ++ ++/** Processes an incoming Ethernet frame, and writes the appropriate response to the output Ethernet ++ * frame buffer if the sub protocol handlers create a valid response. ++ */ ++void Ethernet_ProcessPacket(Ethernet_Frame_Info_t* const FrameIN, ++ Ethernet_Frame_Info_t* const FrameOUT) ++{ ++ DecodeEthernetFrameHeader(FrameIN->FrameData); ++ ++ /* Cast the incoming Ethernet frame to the Ethernet header type */ ++ Ethernet_Frame_Header_t* FrameINHeader = (Ethernet_Frame_Header_t*)&FrameIN->FrameData; ++ Ethernet_Frame_Header_t* FrameOUTHeader = (Ethernet_Frame_Header_t*)&FrameOUT->FrameData; ++ ++ int16_t RetSize = NO_RESPONSE; ++ ++ /* Ensure frame is addressed to either all (broadcast) or the virtual webserver, and is a type II frame */ ++ if ((MAC_COMPARE(&FrameINHeader->Destination, &ServerMACAddress) || ++ MAC_COMPARE(&FrameINHeader->Destination, &BroadcastMACAddress)) && ++ (SwapEndian_16(FrameIN->FrameLength) > ETHERNET_VER2_MINSIZE)) ++ { ++ /* Process the packet depending on its protocol */ ++ switch (SwapEndian_16(FrameINHeader->EtherType)) ++ { ++ case ETHERTYPE_ARP: ++ RetSize = ARP_ProcessARPPacket(&FrameIN->FrameData[sizeof(Ethernet_Frame_Header_t)], ++ &FrameOUT->FrameData[sizeof(Ethernet_Frame_Header_t)]); ++ break; ++ case ETHERTYPE_IPV4: ++ RetSize = IP_ProcessIPPacket(FrameIN, ++ &FrameIN->FrameData[sizeof(Ethernet_Frame_Header_t)], ++ &FrameOUT->FrameData[sizeof(Ethernet_Frame_Header_t)]); ++ break; ++ } ++ ++ /* Protocol processing routine has filled a response, complete the ethernet frame header */ ++ if (RetSize > 0) ++ { ++ /* Fill out the response Ethernet frame header */ ++ FrameOUTHeader->Source = ServerMACAddress; ++ FrameOUTHeader->Destination = FrameINHeader->Source; ++ FrameOUTHeader->EtherType = FrameINHeader->EtherType; ++ ++ /* Set the response length in the buffer and indicate that a response is ready to be sent */ ++ FrameOUT->FrameLength = (sizeof(Ethernet_Frame_Header_t) + RetSize); ++ } ++ } ++ ++ /* Check if the packet was processed */ ++ if (RetSize != NO_PROCESS) ++ { ++ /* Clear the frame buffer */ ++ FrameIN->FrameLength = 0; ++ } ++} ++ ++/** Calculates the appropriate ethernet checksum, consisting of the addition of the one's ++ * compliment of each word, complimented. ++ * ++ * \param[in] Data Pointer to the packet buffer data whose checksum must be calculated ++ * \param[in] Bytes Number of bytes in the data buffer to process ++ * ++ * \return A 16-bit Ethernet checksum value ++ */ ++uint16_t Ethernet_Checksum16(void* Data, ++ uint16_t Bytes) ++{ ++ uint16_t* Words = (uint16_t*)Data; ++ uint32_t Checksum = 0; ++ ++ for (uint16_t CurrWord = 0; CurrWord < (Bytes >> 1); CurrWord++) ++ Checksum += Words[CurrWord]; ++ ++ while (Checksum & 0xFFFF0000) ++ Checksum = ((Checksum & 0xFFFF) + (Checksum >> 16)); ++ ++ return ~Checksum; ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/Ethernet.h index 000000000,000000000..9bdb71c8f new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/Ethernet.h @@@ -1,0 -1,0 +1,101 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 Ethernet.c. ++ */ ++ ++#ifndef _ETHERNET_H_ ++#define _ETHERNET_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <string.h> ++ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include "Config/AppConfig.h" ++ ++ #include "EthernetProtocols.h" ++ #include "ProtocolDecoders.h" ++ #include "ICMP.h" ++ #include "TCP.h" ++ #include "UDP.h" ++ #include "DHCP.h" ++ #include "ARP.h" ++ #include "IP.h" ++ ++ /* Macros: */ ++ /** Physical MAC address of the network broadcast address. */ ++ #define BROADCAST_MAC_ADDRESS {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF} ++ ++ /** Performs a comparison between two MAC addresses, indicating if they are identical. ++ * ++ * \param[in] MAC1 First MAC address ++ * \param[in] MAC2 Second MAC address ++ * ++ * \return True if the addresses match, \c false otherwise ++ */ ++ #define MAC_COMPARE(MAC1, MAC2) (memcmp(MAC1, MAC2, sizeof(MAC_Address_t)) == 0) ++ ++ /** Minimum size of an Ethernet packet in bytes, to conform to the Ethernet V2 packet standard. */ ++ #define ETHERNET_VER2_MINSIZE 0x0600 ++ ++ /** Return value for all sub protocol handling routines, indicating that no response packet has been generated. */ ++ #define NO_RESPONSE 0 ++ ++ /** Return value for all sub protocol handling routines, indicating that the packet has not yet been handled. */ ++ #define NO_PROCESS -1 ++ ++ /* Type Defines: */ ++ /** Type define for an Ethernet frame header. */ ++ typedef struct ++ { ++ MAC_Address_t Destination; /**< Physical MAC address of the packet recipient */ ++ MAC_Address_t Source; /**< Physics MAC address of the packet source */ ++ uint16_t EtherType; /**< Ethernet packet sub-protocol type, for Ethernet V2 packets */ ++ } Ethernet_Frame_Header_t; ++ ++ /* External Variables: */ ++ extern const MAC_Address_t ServerMACAddress; ++ extern const IP_Address_t ServerIPAddress; ++ extern const MAC_Address_t BroadcastMACAddress; ++ extern const IP_Address_t BroadcastIPAddress; ++ extern const IP_Address_t ClientIPAddress; ++ ++ /* Function Prototypes: */ ++ void Ethernet_ProcessPacket(Ethernet_Frame_Info_t* const FrameIN, ++ Ethernet_Frame_Info_t* const FrameOUT); ++ uint16_t Ethernet_Checksum16(void* Data, ++ uint16_t Bytes); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/EthernetProtocols.h index 000000000,000000000..51d3f32ee new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/EthernetProtocols.h @@@ -1,0 -1,0 +1,92 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * General Ethernet protocol constants and type defines, for use by ++ * all network protocol portions of the TCP/IP stack. ++ */ ++ ++#ifndef _ETHERNET_PROTOCOLS_H_ ++#define _ETHERNET_PROTOCOLS_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ /* Macros: */ ++ #define ETHERTYPE_IPV4 0x0800 ++ #define ETHERTYPE_ARP 0x0806 ++ #define ETHERTYPE_RARP 0x8035 ++ #define ETHERTYPE_APPLETALK 0x809b ++ #define ETHERTYPE_APPLETALKARP 0x80f3 ++ #define ETHERTYPE_IEEE8021Q 0x8100 ++ #define ETHERTYPE_NOVELLIPX 0x8137 ++ #define ETHERTYPE_NOVELL 0x8138 ++ #define ETHERTYPE_IPV6 0x86DD ++ #define ETHERTYPE_COBRANET 0x8819 ++ #define ETHERTYPE_PROVIDERBRIDGING 0x88a8 ++ #define ETHERTYPE_MPLSUNICAST 0x8847 ++ #define ETHERTYPE_MPLSMULTICAST 0x8848 ++ #define ETHERTYPE_PPPoEDISCOVERY 0x8863 ++ #define ETHERTYPE_PPPoESESSION 0x8864 ++ #define ETHERTYPE_EAPOVERLAN 0x888E ++ #define ETHERTYPE_HYPERSCSI 0x889A ++ #define ETHERTYPE_ATAOVERETHERNET 0x88A2 ++ #define ETHERTYPE_ETHERCAT 0x88A4 ++ #define ETHERTYPE_SERCOSIII 0x88CD ++ #define ETHERTYPE_CESoE 0x88D8 ++ #define ETHERTYPE_MACSECURITY 0x88E5 ++ #define ETHERTYPE_FIBRECHANNEL 0x8906 ++ #define ETHERTYPE_QINQ 0x9100 ++ #define ETHERTYPE_VLLT 0xCAFE ++ ++ #define PROTOCOL_ICMP 1 ++ #define PROTOCOL_IGMP 2 ++ #define PROTOCOL_TCP 6 ++ #define PROTOCOL_UDP 17 ++ #define PROTOCOL_OSPF 89 ++ #define PROTOCOL_SCTP 132 ++ ++ /* Type Defines: */ ++ /** Type define for an Ethernet frame buffer data and information structure. */ ++ typedef struct ++ { ++ uint8_t FrameData[ETHERNET_FRAME_SIZE_MAX]; /**< Ethernet frame contents. */ ++ uint16_t FrameLength; /**< Length in bytes of the Ethernet frame stored in the buffer. */ ++ } Ethernet_Frame_Info_t; ++ ++ /** Type define for a protocol IP address of a device on a network. */ ++ typedef struct ++ { ++ uint8_t Octets[4]; /**< Individual bytes of an IP address */ ++ } IP_Address_t; ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/ICMP.c index 000000000,000000000..24bc4b53f new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/ICMP.c @@@ -1,0 -1,0 +1,83 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * Internet Control Message Protocol (ICMP) packet handling routines. This protocol handles ++ * Echo requests from the host, to indicate a successful network connection between the host ++ * and the virtual server. ++ */ ++ ++#include "ICMP.h" ++ ++/** Processes an ICMP packet inside an Ethernet frame, and writes the appropriate response ++ * to the output Ethernet frame if the host is issuing a ICMP ECHO request. ++ * ++ * \param[in] FrameIN Pointer to the incoming Ethernet frame information structure ++ * \param[in] InDataStart Pointer to the start of the incoming packet's ICMP header ++ * \param[out] OutDataStart Pointer to the start of the outgoing packet's ICMP header ++ * ++ * \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise ++ */ ++int16_t ICMP_ProcessICMPPacket(Ethernet_Frame_Info_t* const FrameIN, ++ void* InDataStart, ++ void* OutDataStart) ++{ ++ ICMP_Header_t* ICMPHeaderIN = (ICMP_Header_t*)InDataStart; ++ ICMP_Header_t* ICMPHeaderOUT = (ICMP_Header_t*)OutDataStart; ++ ++ DecodeICMPHeader(InDataStart); ++ ++ /* Determine if the ICMP packet is an echo request (ping) */ ++ if (ICMPHeaderIN->Type == ICMP_TYPE_ECHOREQUEST) ++ { ++ /* Fill out the ICMP response packet */ ++ ICMPHeaderOUT->Type = ICMP_TYPE_ECHOREPLY; ++ ICMPHeaderOUT->Code = 0; ++ ICMPHeaderOUT->Checksum = 0; ++ ICMPHeaderOUT->Id = ICMPHeaderIN->Id; ++ ICMPHeaderOUT->Sequence = ICMPHeaderIN->Sequence; ++ ++ intptr_t DataSize = FrameIN->FrameLength - ((((intptr_t)InDataStart + sizeof(ICMP_Header_t)) - (intptr_t)FrameIN->FrameData)); ++ ++ /* Copy the remaining payload to the response - echo requests should echo back any sent data */ ++ memmove(&((uint8_t*)OutDataStart)[sizeof(ICMP_Header_t)], ++ &((uint8_t*)InDataStart)[sizeof(ICMP_Header_t)], ++ DataSize); ++ ++ ICMPHeaderOUT->Checksum = Ethernet_Checksum16(ICMPHeaderOUT, (DataSize + sizeof(ICMP_Header_t))); ++ ++ /* Return the size of the response so far */ ++ return (DataSize + sizeof(ICMP_Header_t)); ++ } ++ ++ return NO_RESPONSE; ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/ICMP.h index 000000000,000000000..594dfffb2 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/ICMP.h @@@ -1,0 -1,0 +1,83 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ICMP.c. ++ */ ++ ++#ifndef _ICMP_H_ ++#define _ICMP_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <string.h> ++ ++ #include "EthernetProtocols.h" ++ #include "Ethernet.h" ++ #include "ProtocolDecoders.h" ++ ++ /* Macros: */ ++ /** ICMP message type constant, indicating an ICMP ECHO Reply message. */ ++ #define ICMP_TYPE_ECHOREPLY 0 ++ ++ /** ICMP message type constant, indicating a packet destination is unreachable. */ ++ #define ICMP_TYPE_DESTINATIONUNREACHABLE 3 ++ ++ /** ICMP message type constant, indicating an ICMP Source Quench message. */ ++ #define ICMP_TYPE_SOURCEQUENCH 4 ++ ++ /** ICMP message type constant, indicating an ICMP Redirect message. */ ++ #define ICMP_TYPE_REDIRECTMESSAGE 5 ++ ++ /** ICMP message type constant, indicating an ICMP ECHO Request message. */ ++ #define ICMP_TYPE_ECHOREQUEST 8 ++ ++ /** ICMP message type constant, indicating an ICMP Time Exceeded message. */ ++ #define ICMP_TYPE_TIMEEXCEEDED 11 ++ ++ /* Type Defines: */ ++ /** Type define for an ICMP message header. */ ++ typedef struct ++ { ++ uint8_t Type; /**< ICMP message type, an \c ICMP_TYPE_* constant */ ++ uint8_t Code; /**< ICMP message code, indicating the message value */ ++ uint16_t Checksum; /**< Ethernet checksum of the ICMP message */ ++ uint16_t Id; /**< Id of the ICMP message */ ++ uint16_t Sequence; /**< Sequence number of the ICMP message, to link together message responses */ ++ } ICMP_Header_t; ++ ++ /* Function Prototypes: */ ++ int16_t ICMP_ProcessICMPPacket(Ethernet_Frame_Info_t* const FrameIN, ++ void* InDataStart, ++ void* OutDataStart); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/IP.c index 000000000,000000000..05d4ebeee new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/IP.c @@@ -1,0 -1,0 +1,116 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * Internet Protocol (IP) packet handling routines. This protocol handles IP packets from the ++ * host which typically encapsulate other protocols such as ICMP, UDP and TCP. ++ */ ++ ++#include "IP.h" ++ ++/** Processes an IP packet inside an Ethernet frame, and writes the appropriate response ++ * to the output Ethernet frame if one is created by a sub-protocol handler. ++ * ++ * \param[in] FrameIN Pointer to the incoming Ethernet frame information structure ++ * \param[in] InDataStart Pointer to the start of the incoming packet's IP header ++ * \param[out] OutDataStart Pointer to the start of the outgoing packet's IP header ++ * ++ * \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE if no ++ * response was generated, NO_PROCESS if the packet processing was deferred until the ++ * next Ethernet packet handler iteration ++ */ ++int16_t IP_ProcessIPPacket(Ethernet_Frame_Info_t* const FrameIN, ++ void* InDataStart, ++ void* OutDataStart) ++{ ++ DecodeIPHeader(InDataStart); ++ ++ IP_Header_t* IPHeaderIN = (IP_Header_t*)InDataStart; ++ IP_Header_t* IPHeaderOUT = (IP_Header_t*)OutDataStart; ++ ++ /* Header length is specified in number of longs in the packet header, convert to bytes */ ++ uint16_t HeaderLengthBytes = (IPHeaderIN->HeaderLength * sizeof(uint32_t)); ++ ++ int16_t RetSize = NO_RESPONSE; ++ ++ /* Check to ensure the IP packet is addressed to the virtual webserver's IP or the broadcast IP address */ ++ if (!(IP_COMPARE(&IPHeaderIN->DestinationAddress, &ServerIPAddress)) && ++ !(IP_COMPARE(&IPHeaderIN->DestinationAddress, &BroadcastIPAddress))) ++ { ++ return NO_RESPONSE; ++ } ++ ++ /* Pass off the IP payload to the appropriate protocol processing routine */ ++ switch (IPHeaderIN->Protocol) ++ { ++ case PROTOCOL_ICMP: ++ RetSize = ICMP_ProcessICMPPacket(FrameIN, ++ &((uint8_t*)InDataStart)[HeaderLengthBytes], ++ &((uint8_t*)OutDataStart)[sizeof(IP_Header_t)]); ++ break; ++ case PROTOCOL_TCP: ++ RetSize = TCP_ProcessTCPPacket(InDataStart, ++ &((uint8_t*)InDataStart)[HeaderLengthBytes], ++ &((uint8_t*)OutDataStart)[sizeof(IP_Header_t)]); ++ break; ++ case PROTOCOL_UDP: ++ RetSize = UDP_ProcessUDPPacket(InDataStart, ++ &((uint8_t*)InDataStart)[HeaderLengthBytes], ++ &((uint8_t*)OutDataStart)[sizeof(IP_Header_t)]); ++ break; ++ } ++ ++ /* Check to see if the protocol processing routine has filled out a response */ ++ if (RetSize > 0) ++ { ++ /* Fill out the response IP packet header */ ++ IPHeaderOUT->TotalLength = SwapEndian_16(sizeof(IP_Header_t) + RetSize); ++ IPHeaderOUT->TypeOfService = 0; ++ IPHeaderOUT->HeaderLength = (sizeof(IP_Header_t) / sizeof(uint32_t)); ++ IPHeaderOUT->Version = 4; ++ IPHeaderOUT->Flags = 0; ++ IPHeaderOUT->FragmentOffset = 0; ++ IPHeaderOUT->Identification = 0; ++ IPHeaderOUT->HeaderChecksum = 0; ++ IPHeaderOUT->Protocol = IPHeaderIN->Protocol; ++ IPHeaderOUT->TTL = DEFAULT_TTL; ++ IPHeaderOUT->SourceAddress = IPHeaderIN->DestinationAddress; ++ IPHeaderOUT->DestinationAddress = IPHeaderIN->SourceAddress; ++ ++ IPHeaderOUT->HeaderChecksum = Ethernet_Checksum16(IPHeaderOUT, sizeof(IP_Header_t)); ++ ++ /* Return the size of the response so far */ ++ return (sizeof(IP_Header_t) + RetSize); ++ } ++ ++ return RetSize; ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/IP.h index 000000000,000000000..0dd6db8a4 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/IP.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 IP.c. ++ */ ++ ++#ifndef _IP_H_ ++#define _IP_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <string.h> ++ ++ #include "EthernetProtocols.h" ++ #include "Ethernet.h" ++ #include "ProtocolDecoders.h" ++ #include "Config/AppConfig.h" ++ ++ /* Macros: */ ++ /** Protocol IP address of the broadcast address. */ ++ #define BROADCAST_IP_ADDRESS {0xFF, 0xFF, 0xFF, 0xFF} ++ ++ /** Default Time To Live (TTL) value for sent packets, indicating the maximum allowable hops until their destination ++ * is reached. ++ */ ++ #define DEFAULT_TTL 128 ++ ++ /** Performs a comparison between two IP addresses, indicating if they are identical. ++ * ++ * \param[in] IP1 First IP address ++ * \param[in] IP2 Second IP address ++ * ++ * \return True if the addresses match, \c false otherwise ++ */ ++ #define IP_COMPARE(IP1, IP2) (memcmp(IP1, IP2, sizeof(IP_Address_t)) == 0) ++ ++ /* Type Defines: */ ++ /** Type define of an IP packet header. */ ++ typedef struct ++ { ++ unsigned HeaderLength : 4; /**< Total length of the packet header, in 4-byte blocks */ ++ unsigned Version : 4; /**< IP protocol version */ ++ uint8_t TypeOfService; /**< Special service type identifier, indicating delay/throughput/reliability levels */ ++ uint16_t TotalLength; /**< Total length of the IP packet, in bytes */ ++ ++ uint16_t Identification; /**< Identification value for identifying fragmented packets */ ++ unsigned FragmentOffset : 13; /**< Offset of this IP fragment */ ++ unsigned Flags : 3; /**< Fragment flags, to indicate if a packet is fragmented */ ++ ++ uint8_t TTL; /**< Maximum allowable number of hops to reach the packet destination */ ++ uint8_t Protocol; /**< Encapsulated protocol type */ ++ uint16_t HeaderChecksum; /**< Ethernet checksum of the IP header */ ++ ++ IP_Address_t SourceAddress; /**< Source protocol IP address of the packet */ ++ IP_Address_t DestinationAddress; /**< Destination protocol IP address of the packet */ ++ } IP_Header_t; ++ ++ /* Function Prototypes: */ ++ int16_t IP_ProcessIPPacket(Ethernet_Frame_Info_t* const FrameIN, ++ void* InDataStart, ++ void* OutDataStart); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/ProtocolDecoders.c index 000000000,000000000..4c72f81b3 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/ProtocolDecoders.c @@@ -1,0 -1,0 +1,277 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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. ++*/ ++ ++/* Protocol decoders for Ethernet, TCP, IP, ICMP and ARP. Each of these routines ++ accepts a header to the appropriate protocol and prints out pertinent information ++ on the packet through the serial port. ++ ++ To disable printing of a specific protocol, define the token NO_DECODE_{Protocol} ++ in the project makefile, and pass it to the compiler using the -D switch. ++*/ ++ ++/** \file ++ * ++ * Protocol decoding routines, for the plain-text decoding of Ethernet frames for debugging purposes. ++ * Enabled protocol decoders will print incoming Ethernet frame contents through the USART in a human ++ * readable format. ++ * ++ * Note that the USART is a slow transmission medium, and will slow down packet processing considerably. ++ * Packet decoding routines can be disabled by defining NO_DECODE_{Protocol Name} in the project makefile ++ * and passing it to the compiler via the -D switch. ++ */ ++ ++#include "ProtocolDecoders.h" ++ ++/** Decodes an Ethernet frame header and prints its contents to through the USART in a human readable format. ++ * ++ * \param[in] InDataStart Pointer to the start of an Ethernet frame of data ++ */ ++void DecodeEthernetFrameHeader(void* InDataStart) ++{ ++ #if !defined(NO_DECODE_ETHERNET) ++ Ethernet_Frame_Header_t* FrameHeader = (Ethernet_Frame_Header_t*)InDataStart; ++ ++ printf_P(PSTR("\r\n")); ++ ++ printf_P(PSTR(" ETHERNET\r\n")); ++ ++ if (!(MAC_COMPARE(&FrameHeader->Destination, &ServerMACAddress)) && ++ !(MAC_COMPARE(&FrameHeader->Destination, &BroadcastMACAddress))) ++ { ++ printf_P(PSTR(" + NOT ADDRESSED TO DEVICE\r\n")); ++ return; ++ } ++ ++ printf_P(PSTR(" + MAC Source : %02X:%02X:%02X:%02X:%02X:%02X\r\n"), FrameHeader->Source.Octets[0], ++ FrameHeader->Source.Octets[1], ++ FrameHeader->Source.Octets[2], ++ FrameHeader->Source.Octets[3], ++ FrameHeader->Source.Octets[4], ++ FrameHeader->Source.Octets[5]); ++ ++ printf_P(PSTR(" + MAC Dest: %02X:%02X:%02X:%02X:%02X:%02X\r\n"), FrameHeader->Destination.Octets[0], ++ FrameHeader->Destination.Octets[1], ++ FrameHeader->Destination.Octets[2], ++ FrameHeader->Destination.Octets[3], ++ FrameHeader->Destination.Octets[4], ++ FrameHeader->Destination.Octets[5]); ++ ++ printf_P(PSTR(" + Protocol: 0x%04x\r\n"), SwapEndian_16(FrameHeader->EtherType)); ++ #endif ++} ++ ++/** Decodes an ARP header and prints its contents to through the USART in a human readable format. ++ * ++ * \param[in] InDataStart Pointer to the start of an ARP packet header ++ */ ++void DecodeARPHeader(void* InDataStart) ++{ ++ #if !defined(NO_DECODE_ARP) ++ ARP_Header_t* ARPHeader = (ARP_Header_t*)InDataStart; ++ ++ printf_P(PSTR(" \\\r\n ARP\r\n")); ++ ++ if (!(IP_COMPARE(&ARPHeader->TPA, &ServerIPAddress)) && ++ !(MAC_COMPARE(&ARPHeader->THA, &ServerMACAddress))) ++ { ++ printf_P(PSTR(" + NOT ADDRESSED TO DEVICE\r\n")); ++ return; ++ } ++ ++ printf_P(PSTR(" + Protocol: %x\r\n"), SwapEndian_16(ARPHeader->ProtocolType)); ++ printf_P(PSTR(" + Operation: %u\r\n"), SwapEndian_16(ARPHeader->Operation)); ++ ++ if (SwapEndian_16(ARPHeader->ProtocolType) == ETHERTYPE_IPV4) ++ { ++ printf_P(PSTR(" + SHA MAC: %02X:%02X:%02X:%02X:%02X:%02X\r\n"), ARPHeader->SHA.Octets[0], ++ ARPHeader->SHA.Octets[1], ++ ARPHeader->SHA.Octets[2], ++ ARPHeader->SHA.Octets[3], ++ ARPHeader->SHA.Octets[4], ++ ARPHeader->SHA.Octets[5]); ++ ++ printf_P(PSTR(" + SPA IP: %u.%u.%u.%u\r\n"), ARPHeader->SPA.Octets[0], ++ ARPHeader->SPA.Octets[1], ++ ARPHeader->SPA.Octets[2], ++ ARPHeader->SPA.Octets[3]); ++ ++ printf_P(PSTR(" + THA MAC: %02X:%02X:%02X:%02X:%02X:%02X\r\n"), ARPHeader->THA.Octets[0], ++ ARPHeader->THA.Octets[1], ++ ARPHeader->THA.Octets[2], ++ ARPHeader->THA.Octets[3], ++ ARPHeader->THA.Octets[4], ++ ARPHeader->THA.Octets[5]); ++ ++ printf_P(PSTR(" + TPA IP: %u.%u.%u.%u\r\n"), ARPHeader->TPA.Octets[0], ++ ARPHeader->TPA.Octets[1], ++ ARPHeader->TPA.Octets[2], ++ ARPHeader->TPA.Octets[3]); ++ } ++ #endif ++} ++ ++/** Decodes an IP header and prints its contents to through the USART in a human readable format. ++ * ++ * \param[in] InDataStart Pointer to the start of an IP packet header ++ */ ++void DecodeIPHeader(void* InDataStart) ++{ ++ #if !defined(NO_DECODE_IP) ++ IP_Header_t* IPHeader = (IP_Header_t*)InDataStart; ++ ++ uint16_t HeaderLengthBytes = (IPHeader->HeaderLength * sizeof(uint32_t)); ++ ++ printf_P(PSTR(" \\\r\n IP\r\n")); ++ ++ if (!(IP_COMPARE(&IPHeader->DestinationAddress, &ServerIPAddress))) ++ { ++ printf_P(PSTR(" + NOT ADDRESSED TO DEVICE\r\n")); ++ return; ++ } ++ ++ printf_P(PSTR(" + Header Length: %u Bytes\r\n"), HeaderLengthBytes); ++ printf_P(PSTR(" + Packet Version: %u\r\n"), IPHeader->Version); ++ printf_P(PSTR(" + Total Length: %u\r\n"), SwapEndian_16(IPHeader->TotalLength)); ++ ++ printf_P(PSTR(" + Protocol: %u\r\n"), IPHeader->Protocol); ++ printf_P(PSTR(" + TTL: %u\r\n"), IPHeader->TTL); ++ ++ printf_P(PSTR(" + IP Src: %u.%u.%u.%u\r\n"), IPHeader->SourceAddress.Octets[0], ++ IPHeader->SourceAddress.Octets[1], ++ IPHeader->SourceAddress.Octets[2], ++ IPHeader->SourceAddress.Octets[3]); ++ ++ printf_P(PSTR(" + IP Dst: %u.%u.%u.%u\r\n"), IPHeader->DestinationAddress.Octets[0], ++ IPHeader->DestinationAddress.Octets[1], ++ IPHeader->DestinationAddress.Octets[2], ++ IPHeader->DestinationAddress.Octets[3]); ++ #endif ++} ++ ++/** Decodes an ICMP header and prints its contents to through the USART in a human readable format. ++ * ++ * \param[in] InDataStart Pointer to the start of an ICMP packet header ++ */ ++void DecodeICMPHeader(void* InDataStart) ++{ ++ #if !defined(NO_DECODE_ICMP) ++ ICMP_Header_t* ICMPHeader = (ICMP_Header_t*)InDataStart; ++ ++ printf_P(PSTR(" \\\r\n ICMP\r\n")); ++ ++ printf_P(PSTR(" + Type: %u\r\n"), ICMPHeader->Type); ++ printf_P(PSTR(" + Code: %u\r\n"), ICMPHeader->Code); ++ #endif ++} ++ ++/** Decodes a TCP header and prints its contents to through the USART in a human readable format. ++ * ++ * \param[in] InDataStart Pointer to the start of a TCP packet header ++ */ ++void DecodeTCPHeader(void* InDataStart) ++{ ++ #if !defined(NO_DECODE_TCP) ++ TCP_Header_t* TCPHeader = (TCP_Header_t*)InDataStart; ++ ++ uint16_t HeaderLengthBytes = (TCPHeader->DataOffset * sizeof(uint32_t)); ++ ++ printf_P(PSTR(" \\\r\n TCP\r\n")); ++ ++ printf_P(PSTR(" + Header Length: %u Bytes\r\n"), HeaderLengthBytes); ++ ++ printf_P(PSTR(" + Source Port: %u\r\n"), SwapEndian_16(TCPHeader->SourcePort)); ++ printf_P(PSTR(" + Destination Port: %u\r\n"), SwapEndian_16(TCPHeader->DestinationPort)); ++ ++ printf_P(PSTR(" + Sequence Number: %lu\r\n"), SwapEndian_32(TCPHeader->SequenceNumber)); ++ printf_P(PSTR(" + Acknowledgment Number: %lu\r\n"), SwapEndian_32(TCPHeader->AcknowledgmentNumber)); ++ ++ printf_P(PSTR(" + Flags: 0x%02X\r\n"), TCPHeader->Flags); ++ ++ if (TCP_GetPortState(TCPHeader->DestinationPort) == TCP_Port_Closed) ++ printf_P(PSTR(" + NOT LISTENING ON DESTINATION PORT\r\n")); ++ #endif ++} ++ ++/** Decodes an UDP header and prints its contents to through the USART in a human readable format. ++ * ++ * \param[in] InDataStart Pointer to the start of a UDP packet header ++ */ ++void DecodeUDPHeader(void* InDataStart) ++{ ++ #if !defined(NO_DECODE_UDP) ++ UDP_Header_t* UDPHeader = (UDP_Header_t*)InDataStart; ++ ++ printf_P(PSTR(" \\\r\n UDP\r\n")); ++ ++ printf_P(PSTR(" + Source Port: %u\r\n"), SwapEndian_16(UDPHeader->SourcePort)); ++ printf_P(PSTR(" + Destination Port: %u\r\n"), SwapEndian_16(UDPHeader->DestinationPort)); ++ ++ printf_P(PSTR(" + Data Length: %d\r\n"), SwapEndian_16(UDPHeader->Length)); ++ #endif ++} ++ ++/** Decodes an DHCP header and prints its contents to through the USART in a human readable format. ++ * ++ * \param[in] InDataStart Pointer to the start of a DHCP packet header ++ */ ++void DecodeDHCPHeader(void* InDataStart) ++{ ++ #if !defined(NO_DECODE_DHCP) ++ uint8_t* DHCPOptions = ((uint8_t*)InDataStart + sizeof(DHCP_Header_t)); ++ ++ printf_P(PSTR(" \\\r\n DHCP\r\n")); ++ ++ while (DHCPOptions[0] != DHCP_OPTION_END) ++ { ++ if (DHCPOptions[0] == DHCP_OPTION_MESSAGETYPE) ++ { ++ switch (DHCPOptions[2]) ++ { ++ case DHCP_MESSAGETYPE_DISCOVER: ++ printf_P(PSTR(" + DISCOVER\r\n")); ++ break; ++ case DHCP_MESSAGETYPE_REQUEST: ++ printf_P(PSTR(" + REQUEST\r\n")); ++ break; ++ case DHCP_MESSAGETYPE_RELEASE: ++ printf_P(PSTR(" + RELEASE\r\n")); ++ break; ++ case DHCP_MESSAGETYPE_DECLINE: ++ printf_P(PSTR(" + DECLINE\r\n")); ++ break; ++ } ++ } ++ ++ DHCPOptions += ((DHCPOptions[0] == DHCP_OPTION_PAD) ? 1 : (DHCPOptions[1] + 2)); ++ } ++ ++ #endif ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/ProtocolDecoders.h index 000000000,000000000..77a50f02f new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/ProtocolDecoders.h @@@ -1,0 -1,0 +1,60 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ProtocolDecoders.c. ++ */ ++ ++#ifndef _PROTOCOL_DECODERS_H_ ++#define _PROTOCOL_DECODERS_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/pgmspace.h> ++ #include <stdio.h> ++ ++ #include <LUFA/Drivers/Peripheral/Serial.h> ++ ++ #include "EthernetProtocols.h" ++ #include "Ethernet.h" ++ #include "Config/AppConfig.h" ++ ++ /* Function Prototypes: */ ++ void DecodeEthernetFrameHeader(void* InDataStart); ++ void DecodeARPHeader(void* InDataStart); ++ void DecodeIPHeader(void* InDataStart); ++ void DecodeICMPHeader(void* InDataStart); ++ void DecodeTCPHeader(void* InDataStart); ++ void DecodeUDPHeader(void* InDataStart); ++ void DecodeDHCPHeader(void* InDataStart); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/TCP.c index 000000000,000000000..dcc527aa9 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/TCP.c @@@ -1,0 -1,0 +1,632 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * Transmission Control Protocol (TCP) packet handling routines. This protocol handles the reliable in-order transmission ++ * and reception of packets to and from devices on a network, to "ports" on the device. It is used in situations where data ++ * delivery must be reliable and correct, e.g. HTTP, TELNET and most other non-streaming protocols. ++ */ ++ ++#define INCLUDE_FROM_TCP_C ++#include "TCP.h" ++ ++/** Port state table array. This contains the current status of TCP ports in the device. To save on space, only open ports are ++ * stored - closed ports may be overwritten at any time, and the system will assume any ports not present in the array are closed. This ++ * allows for MAX_OPEN_TCP_PORTS to be less than the number of ports used by the application if desired. ++ */ ++TCP_PortState_t PortStateTable[MAX_OPEN_TCP_PORTS]; ++ ++/** Connection state table array. This contains the current status of TCP connections in the device. To save on space, only active ++ * (non-closed) connections are stored - closed connections may be overwritten at any time, and the system will assume any connections ++ * not present in the array are closed. ++ */ ++TCP_ConnectionState_t ConnectionStateTable[MAX_TCP_CONNECTIONS]; ++ ++ ++/** Task to handle the calling of each registered application's callback function, to process and generate TCP packets at the application ++ * level. If an application produces a response, this task constructs the appropriate Ethernet frame and places it into the Ethernet OUT ++ * buffer for later transmission. ++ */ ++void TCP_TCPTask(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfaceInfo, ++ Ethernet_Frame_Info_t* const FrameOUT) ++{ ++ /* Run each application in sequence, to process incoming and generate outgoing packets */ ++ for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++) ++ { ++ /* Find the corresponding port entry in the port table */ ++ for (uint8_t PTableEntry = 0; PTableEntry < MAX_OPEN_TCP_PORTS; PTableEntry++) ++ { ++ /* Run the application handler for the port */ ++ if ((PortStateTable[PTableEntry].Port == ConnectionStateTable[CSTableEntry].Port) && ++ (PortStateTable[PTableEntry].State == TCP_Port_Open)) ++ { ++ PortStateTable[PTableEntry].ApplicationHandler(&ConnectionStateTable[CSTableEntry], ++ &ConnectionStateTable[CSTableEntry].Info.Buffer); ++ } ++ } ++ } ++ ++ /* Bail out early if there is already a frame waiting to be sent in the Ethernet OUT buffer */ ++ if (FrameOUT->FrameLength) ++ return; ++ ++ /* Send response packets from each application as the TCP packet buffers are filled by the applications */ ++ for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++) ++ { ++ /* For each completely received packet, pass it along to the listening application */ ++ if ((ConnectionStateTable[CSTableEntry].Info.Buffer.Direction == TCP_PACKETDIR_OUT) && ++ (ConnectionStateTable[CSTableEntry].Info.Buffer.Ready)) ++ { ++ Ethernet_Frame_Header_t* FrameOUTHeader = (Ethernet_Frame_Header_t*)&FrameOUT->FrameData; ++ IP_Header_t* IPHeaderOUT = (IP_Header_t*)&FrameOUT->FrameData[sizeof(Ethernet_Frame_Header_t)]; ++ TCP_Header_t* TCPHeaderOUT = (TCP_Header_t*)&FrameOUT->FrameData[sizeof(Ethernet_Frame_Header_t) + ++ sizeof(IP_Header_t)]; ++ void* TCPDataOUT = &FrameOUT->FrameData[sizeof(Ethernet_Frame_Header_t) + ++ sizeof(IP_Header_t) + ++ sizeof(TCP_Header_t)]; ++ ++ uint16_t PacketSize = ConnectionStateTable[CSTableEntry].Info.Buffer.Length; ++ ++ /* Fill out the TCP data */ ++ TCPHeaderOUT->SourcePort = ConnectionStateTable[CSTableEntry].Port; ++ TCPHeaderOUT->DestinationPort = ConnectionStateTable[CSTableEntry].RemotePort; ++ TCPHeaderOUT->SequenceNumber = SwapEndian_32(ConnectionStateTable[CSTableEntry].Info.SequenceNumberOut); ++ TCPHeaderOUT->AcknowledgmentNumber = SwapEndian_32(ConnectionStateTable[CSTableEntry].Info.SequenceNumberIn); ++ TCPHeaderOUT->DataOffset = (sizeof(TCP_Header_t) / sizeof(uint32_t)); ++ TCPHeaderOUT->WindowSize = SwapEndian_16(TCP_WINDOW_SIZE); ++ ++ TCPHeaderOUT->Flags = TCP_FLAG_ACK; ++ TCPHeaderOUT->UrgentPointer = 0; ++ TCPHeaderOUT->Checksum = 0; ++ TCPHeaderOUT->Reserved = 0; ++ ++ memcpy(TCPDataOUT, ConnectionStateTable[CSTableEntry].Info.Buffer.Data, PacketSize); ++ ++ ConnectionStateTable[CSTableEntry].Info.SequenceNumberOut += PacketSize; ++ ++ TCPHeaderOUT->Checksum = TCP_Checksum16(TCPHeaderOUT, &ServerIPAddress, ++ &ConnectionStateTable[CSTableEntry].RemoteAddress, ++ (sizeof(TCP_Header_t) + PacketSize)); ++ ++ PacketSize += sizeof(TCP_Header_t); ++ ++ /* Fill out the response IP header */ ++ IPHeaderOUT->TotalLength = SwapEndian_16(sizeof(IP_Header_t) + PacketSize); ++ IPHeaderOUT->TypeOfService = 0; ++ IPHeaderOUT->HeaderLength = (sizeof(IP_Header_t) / sizeof(uint32_t)); ++ IPHeaderOUT->Version = 4; ++ IPHeaderOUT->Flags = 0; ++ IPHeaderOUT->FragmentOffset = 0; ++ IPHeaderOUT->Identification = 0; ++ IPHeaderOUT->HeaderChecksum = 0; ++ IPHeaderOUT->Protocol = PROTOCOL_TCP; ++ IPHeaderOUT->TTL = DEFAULT_TTL; ++ IPHeaderOUT->SourceAddress = ServerIPAddress; ++ IPHeaderOUT->DestinationAddress = ConnectionStateTable[CSTableEntry].RemoteAddress; ++ ++ IPHeaderOUT->HeaderChecksum = Ethernet_Checksum16(IPHeaderOUT, sizeof(IP_Header_t)); ++ ++ PacketSize += sizeof(IP_Header_t); ++ ++ /* Fill out the response Ethernet frame header */ ++ FrameOUTHeader->Source = ServerMACAddress; ++ FrameOUTHeader->Destination = (MAC_Address_t){{0x02, 0x00, 0x02, 0x00, 0x02, 0x00}}; ++ FrameOUTHeader->EtherType = SwapEndian_16(ETHERTYPE_IPV4); ++ ++ PacketSize += sizeof(Ethernet_Frame_Header_t); ++ ++ /* Set the response length in the buffer and indicate that a response is ready to be sent */ ++ FrameOUT->FrameLength = PacketSize; ++ ++ ConnectionStateTable[CSTableEntry].Info.Buffer.Ready = false; ++ ++ break; ++ } ++ } ++} ++ ++/** Initializes the TCP protocol handler, clearing the port and connection state tables. This must be called before TCP packets are ++ * processed. ++ */ ++void TCP_Init(void) ++{ ++ /* Initialize the port state table with all CLOSED entries */ ++ for (uint8_t PTableEntry = 0; PTableEntry < MAX_OPEN_TCP_PORTS; PTableEntry++) ++ PortStateTable[PTableEntry].State = TCP_Port_Closed; ++ ++ /* Initialize the connection table with all CLOSED entries */ ++ for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++) ++ ConnectionStateTable[CSTableEntry].State = TCP_Connection_Closed; ++} ++ ++/** Sets the state and callback handler of the given port, specified in big endian to the given state. ++ * ++ * \param[in] Port Port whose state and callback function to set, specified in big endian ++ * \param[in] State New state of the port, a value from the \ref TCP_PortStates_t enum ++ * \param[in] Handler Application callback handler for the port ++ * ++ * \return Boolean \c true if the port state was set, \c false otherwise (no more space in the port state table) ++ */ ++bool TCP_SetPortState(const uint16_t Port, ++ const uint8_t State, ++ void (*Handler)(TCP_ConnectionState_t*, TCP_ConnectionBuffer_t*)) ++{ ++ /* Note, Port number should be specified in BIG endian to simplify network code */ ++ ++ /* Check to see if the port entry is already in the port state table */ ++ for (uint8_t PTableEntry = 0; PTableEntry < MAX_OPEN_TCP_PORTS; PTableEntry++) ++ { ++ /* Find existing entry for the port in the table, update it if found */ ++ if (PortStateTable[PTableEntry].Port == Port) ++ { ++ PortStateTable[PTableEntry].State = State; ++ PortStateTable[PTableEntry].ApplicationHandler = Handler; ++ return true; ++ } ++ } ++ ++ /* Check if trying to open the port -- if so we need to find an unused (closed) entry and replace it */ ++ if (State == TCP_Port_Open) ++ { ++ for (uint8_t PTableEntry = 0; PTableEntry < MAX_OPEN_TCP_PORTS; PTableEntry++) ++ { ++ /* Find a closed port entry in the table, change it to the given port and state */ ++ if (PortStateTable[PTableEntry].State == TCP_Port_Closed) ++ { ++ PortStateTable[PTableEntry].Port = Port; ++ PortStateTable[PTableEntry].State = State; ++ PortStateTable[PTableEntry].ApplicationHandler = Handler; ++ return true; ++ } ++ } ++ ++ /* Port not in table and no room to add it, return failure */ ++ return false; ++ } ++ else ++ { ++ /* Port not in table but trying to close it, so operation successful */ ++ return true; ++ } ++} ++ ++/** Retrieves the current state of a given TCP port, specified in big endian. ++ * ++ * \param[in] Port TCP port whose state is to be retrieved, given in big-endian ++ * ++ * \return A value from the \ref TCP_PortStates_t enum ++ */ ++uint8_t TCP_GetPortState(const uint16_t Port) ++{ ++ /* Note, Port number should be specified in BIG endian to simplify network code */ ++ ++ for (uint8_t PTableEntry = 0; PTableEntry < MAX_OPEN_TCP_PORTS; PTableEntry++) ++ { ++ /* Find existing entry for the port in the table, return the port status if found */ ++ if (PortStateTable[PTableEntry].Port == Port) ++ return PortStateTable[PTableEntry].State; ++ } ++ ++ /* Port not in table, assume closed */ ++ return TCP_Port_Closed; ++} ++ ++/** Sets the connection state of the given port, remote address and remote port to the given TCP connection state. If the ++ * connection exists in the connection state table it is updated, otherwise it is created if possible. ++ * ++ * \param[in] Port TCP port of the connection on the device, specified in big endian ++ * \param[in] RemoteAddress Remote protocol IP address of the connected device ++ * \param[in] RemotePort TCP port of the remote device in the connection, specified in big endian ++ * \param[in] State TCP connection state, a value from the \ref TCP_ConnectionStates_t enum ++ * ++ * \return Boolean \c true if the connection was updated or created, \c false otherwise (no more space in the connection state table) ++ */ ++bool TCP_SetConnectionState(const uint16_t Port, ++ const IP_Address_t* RemoteAddress, ++ const uint16_t RemotePort, ++ const uint8_t State) ++{ ++ /* Note, Port number should be specified in BIG endian to simplify network code */ ++ ++ for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++) ++ { ++ /* Find port entry in the table */ ++ if ((ConnectionStateTable[CSTableEntry].Port == Port) && ++ IP_COMPARE(&ConnectionStateTable[CSTableEntry].RemoteAddress, RemoteAddress) && ++ ConnectionStateTable[CSTableEntry].RemotePort == RemotePort) ++ { ++ ConnectionStateTable[CSTableEntry].State = State; ++ return true; ++ } ++ } ++ ++ for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++) ++ { ++ /* Find empty entry in the table */ ++ if (ConnectionStateTable[CSTableEntry].State == TCP_Connection_Closed) ++ { ++ ConnectionStateTable[CSTableEntry].Port = Port; ++ ConnectionStateTable[CSTableEntry].RemoteAddress = *RemoteAddress; ++ ConnectionStateTable[CSTableEntry].RemotePort = RemotePort; ++ ConnectionStateTable[CSTableEntry].State = State; ++ return true; ++ } ++ } ++ ++ return false; ++} ++ ++/** Retrieves the current state of a given TCP connection to a host. ++ * ++ * \param[in] Port TCP port on the device in the connection, specified in big endian ++ * \param[in] RemoteAddress Remote protocol IP address of the connected host ++ * \param[in] RemotePort Remote TCP port of the connected host, specified in big endian ++ * ++ * \return A value from the \ref TCP_ConnectionStates_t enum ++ */ ++uint8_t TCP_GetConnectionState(const uint16_t Port, ++ const IP_Address_t* RemoteAddress, ++ const uint16_t RemotePort) ++{ ++ /* Note, Port number should be specified in BIG endian to simplify network code */ ++ ++ for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++) ++ { ++ /* Find port entry in the table */ ++ if ((ConnectionStateTable[CSTableEntry].Port == Port) && ++ IP_COMPARE(&ConnectionStateTable[CSTableEntry].RemoteAddress, RemoteAddress) && ++ ConnectionStateTable[CSTableEntry].RemotePort == RemotePort) ++ ++ { ++ return ConnectionStateTable[CSTableEntry].State; ++ } ++ } ++ ++ return TCP_Connection_Closed; ++} ++ ++/** Retrieves the connection info structure of a given connection to a host. ++ * ++ * \param[in] Port TCP port on the device in the connection, specified in big endian ++ * \param[in] RemoteAddress Remote protocol IP address of the connected host ++ * \param[in] RemotePort Remote TCP port of the connected host, specified in big endian ++ * ++ * \return ConnectionInfo structure of the connection if found, NULL otherwise ++ */ ++TCP_ConnectionInfo_t* TCP_GetConnectionInfo(const uint16_t Port, ++ const IP_Address_t* RemoteAddress, ++ const uint16_t RemotePort) ++{ ++ /* Note, Port number should be specified in BIG endian to simplify network code */ ++ ++ for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++) ++ { ++ /* Find port entry in the table */ ++ if ((ConnectionStateTable[CSTableEntry].Port == Port) && ++ IP_COMPARE(&ConnectionStateTable[CSTableEntry].RemoteAddress, RemoteAddress) && ++ ConnectionStateTable[CSTableEntry].RemotePort == RemotePort) ++ { ++ return &ConnectionStateTable[CSTableEntry].Info; ++ } ++ } ++ ++ return NULL; ++} ++ ++/** Processes a TCP packet inside an Ethernet frame, and writes the appropriate response ++ * to the output Ethernet frame if one is created by a application handler. ++ * ++ * \param[in] IPHeaderInStart Pointer to the start of the incoming packet's IP header ++ * \param[in] TCPHeaderInStart Pointer to the start of the incoming packet's TCP header ++ * \param[out] TCPHeaderOutStart Pointer to the start of the outgoing packet's TCP header ++ * ++ * \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE if no ++ * response was generated, NO_PROCESS if the packet processing was deferred until the ++ * next Ethernet packet handler iteration ++ */ ++int16_t TCP_ProcessTCPPacket(void* IPHeaderInStart, ++ void* TCPHeaderInStart, ++ void* TCPHeaderOutStart) ++{ ++ IP_Header_t* IPHeaderIN = (IP_Header_t*)IPHeaderInStart; ++ TCP_Header_t* TCPHeaderIN = (TCP_Header_t*)TCPHeaderInStart; ++ TCP_Header_t* TCPHeaderOUT = (TCP_Header_t*)TCPHeaderOutStart; ++ ++ TCP_ConnectionInfo_t* ConnectionInfo; ++ ++ DecodeTCPHeader(TCPHeaderInStart); ++ ++ bool PacketResponse = false; ++ ++ /* Check if the destination port is open and allows incoming connections */ ++ if (TCP_GetPortState(TCPHeaderIN->DestinationPort) == TCP_Port_Open) ++ { ++ /* Detect SYN from host to start a connection */ ++ if (TCPHeaderIN->Flags & TCP_FLAG_SYN) ++ TCP_SetConnectionState(TCPHeaderIN->DestinationPort, &IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort, TCP_Connection_Listen); ++ ++ /* Detect RST from host to abort existing connection */ ++ if (TCPHeaderIN->Flags & TCP_FLAG_RST) ++ { ++ if (TCP_SetConnectionState(TCPHeaderIN->DestinationPort, &IPHeaderIN->SourceAddress, ++ TCPHeaderIN->SourcePort, TCP_Connection_Closed)) ++ { ++ TCPHeaderOUT->Flags = (TCP_FLAG_RST | TCP_FLAG_ACK); ++ PacketResponse = true; ++ } ++ } ++ else ++ { ++ /* Process the incoming TCP packet based on the current connection state for the sender and port */ ++ switch (TCP_GetConnectionState(TCPHeaderIN->DestinationPort, &IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort)) ++ { ++ case TCP_Connection_Listen: ++ if (TCPHeaderIN->Flags == TCP_FLAG_SYN) ++ { ++ /* SYN connection starts a connection with a peer */ ++ if (TCP_SetConnectionState(TCPHeaderIN->DestinationPort, &IPHeaderIN->SourceAddress, ++ TCPHeaderIN->SourcePort, TCP_Connection_SYNReceived)) ++ { ++ TCPHeaderOUT->Flags = (TCP_FLAG_SYN | TCP_FLAG_ACK); ++ ++ ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, &IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort); ++ ++ ConnectionInfo->SequenceNumberIn = (SwapEndian_32(TCPHeaderIN->SequenceNumber) + 1); ++ ConnectionInfo->SequenceNumberOut = 0; ++ ConnectionInfo->Buffer.InUse = false; ++ } ++ else ++ { ++ TCPHeaderOUT->Flags = TCP_FLAG_RST; ++ } ++ ++ PacketResponse = true; ++ } ++ ++ break; ++ case TCP_Connection_SYNReceived: ++ if (TCPHeaderIN->Flags == TCP_FLAG_ACK) ++ { ++ /* ACK during the connection process completes the connection to a peer */ ++ ++ TCP_SetConnectionState(TCPHeaderIN->DestinationPort, &IPHeaderIN->SourceAddress, ++ TCPHeaderIN->SourcePort, TCP_Connection_Established); ++ ++ ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, &IPHeaderIN->SourceAddress, ++ TCPHeaderIN->SourcePort); ++ ++ ConnectionInfo->SequenceNumberOut++; ++ } ++ ++ break; ++ case TCP_Connection_Established: ++ if (TCPHeaderIN->Flags == (TCP_FLAG_FIN | TCP_FLAG_ACK)) ++ { ++ /* FIN ACK when connected to a peer starts the finalization process */ ++ ++ TCPHeaderOUT->Flags = (TCP_FLAG_FIN | TCP_FLAG_ACK); ++ PacketResponse = true; ++ ++ TCP_SetConnectionState(TCPHeaderIN->DestinationPort, &IPHeaderIN->SourceAddress, ++ TCPHeaderIN->SourcePort, TCP_Connection_CloseWait); ++ ++ ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, &IPHeaderIN->SourceAddress, ++ TCPHeaderIN->SourcePort); ++ ++ ConnectionInfo->SequenceNumberIn++; ++ ConnectionInfo->SequenceNumberOut++; ++ } ++ else if ((TCPHeaderIN->Flags == TCP_FLAG_ACK) || (TCPHeaderIN->Flags == (TCP_FLAG_ACK | TCP_FLAG_PSH))) ++ { ++ ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, &IPHeaderIN->SourceAddress, ++ TCPHeaderIN->SourcePort); ++ ++ /* Check if the buffer is currently in use either by a buffered data to send, or receive */ ++ if ((ConnectionInfo->Buffer.InUse == false) && (ConnectionInfo->Buffer.Ready == false)) ++ { ++ ConnectionInfo->Buffer.Direction = TCP_PACKETDIR_IN; ++ ConnectionInfo->Buffer.InUse = true; ++ ConnectionInfo->Buffer.Length = 0; ++ } ++ ++ /* Check if the buffer has been claimed by us to read in data from the peer */ ++ if ((ConnectionInfo->Buffer.Direction == TCP_PACKETDIR_IN) && ++ (ConnectionInfo->Buffer.Length != TCP_WINDOW_SIZE)) ++ { ++ uint16_t IPOffset = (IPHeaderIN->HeaderLength * sizeof(uint32_t)); ++ uint16_t TCPOffset = (TCPHeaderIN->DataOffset * sizeof(uint32_t)); ++ uint16_t DataLength = (SwapEndian_16(IPHeaderIN->TotalLength) - IPOffset - TCPOffset); ++ ++ /* Copy the packet data into the buffer */ ++ memcpy(&ConnectionInfo->Buffer.Data[ConnectionInfo->Buffer.Length], ++ &((uint8_t*)TCPHeaderInStart)[TCPOffset], ++ DataLength); ++ ++ ConnectionInfo->SequenceNumberIn += DataLength; ++ ConnectionInfo->Buffer.Length += DataLength; ++ ++ /* Check if the buffer is full or if the PSH flag is set, if so indicate buffer ready */ ++ if ((!(TCP_WINDOW_SIZE - ConnectionInfo->Buffer.Length)) || (TCPHeaderIN->Flags & TCP_FLAG_PSH)) ++ { ++ ConnectionInfo->Buffer.InUse = false; ++ ConnectionInfo->Buffer.Ready = true; ++ ++ TCPHeaderOUT->Flags = TCP_FLAG_ACK; ++ PacketResponse = true; ++ } ++ } ++ else ++ { ++ /* Buffer is currently in use by the application, defer processing of the incoming packet */ ++ return NO_PROCESS; ++ } ++ } ++ ++ break; ++ case TCP_Connection_Closing: ++ ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, &IPHeaderIN->SourceAddress, ++ TCPHeaderIN->SourcePort); ++ ++ TCPHeaderOUT->Flags = (TCP_FLAG_ACK | TCP_FLAG_FIN); ++ PacketResponse = true; ++ ++ ConnectionInfo->Buffer.InUse = false; ++ ++ TCP_SetConnectionState(TCPHeaderIN->DestinationPort, &IPHeaderIN->SourceAddress, ++ TCPHeaderIN->SourcePort, TCP_Connection_FINWait1); ++ ++ break; ++ case TCP_Connection_FINWait1: ++ if (TCPHeaderIN->Flags == (TCP_FLAG_FIN | TCP_FLAG_ACK)) ++ { ++ ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, &IPHeaderIN->SourceAddress, ++ TCPHeaderIN->SourcePort); ++ ++ TCPHeaderOUT->Flags = TCP_FLAG_ACK; ++ PacketResponse = true; ++ ++ ConnectionInfo->SequenceNumberIn++; ++ ConnectionInfo->SequenceNumberOut++; ++ ++ TCP_SetConnectionState(TCPHeaderIN->DestinationPort, &IPHeaderIN->SourceAddress, ++ TCPHeaderIN->SourcePort, TCP_Connection_Closed); ++ } ++ else if (TCPHeaderIN->Flags == TCP_FLAG_ACK) ++ { ++ TCP_SetConnectionState(TCPHeaderIN->DestinationPort, &IPHeaderIN->SourceAddress, ++ TCPHeaderIN->SourcePort, TCP_Connection_FINWait2); ++ } ++ ++ break; ++ case TCP_Connection_FINWait2: ++ if (TCPHeaderIN->Flags == (TCP_FLAG_FIN | TCP_FLAG_ACK)) ++ { ++ ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, &IPHeaderIN->SourceAddress, ++ TCPHeaderIN->SourcePort); ++ ++ TCPHeaderOUT->Flags = TCP_FLAG_ACK; ++ PacketResponse = true; ++ ++ ConnectionInfo->SequenceNumberIn++; ++ ConnectionInfo->SequenceNumberOut++; ++ ++ TCP_SetConnectionState(TCPHeaderIN->DestinationPort, &IPHeaderIN->SourceAddress, ++ TCPHeaderIN->SourcePort, TCP_Connection_Closed); ++ } ++ ++ break; ++ case TCP_Connection_CloseWait: ++ if (TCPHeaderIN->Flags == TCP_FLAG_ACK) ++ { ++ TCP_SetConnectionState(TCPHeaderIN->DestinationPort, &IPHeaderIN->SourceAddress, ++ TCPHeaderIN->SourcePort, TCP_Connection_Closed); ++ } ++ ++ break; ++ } ++ } ++ } ++ else ++ { ++ /* Port is not open, indicate via a RST/ACK response to the sender */ ++ TCPHeaderOUT->Flags = (TCP_FLAG_RST | TCP_FLAG_ACK); ++ PacketResponse = true; ++ } ++ ++ /* Check if we need to respond to the sent packet */ ++ if (PacketResponse) ++ { ++ ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, &IPHeaderIN->SourceAddress, ++ TCPHeaderIN->SourcePort); ++ ++ TCPHeaderOUT->SourcePort = TCPHeaderIN->DestinationPort; ++ TCPHeaderOUT->DestinationPort = TCPHeaderIN->SourcePort; ++ TCPHeaderOUT->SequenceNumber = SwapEndian_32(ConnectionInfo->SequenceNumberOut); ++ TCPHeaderOUT->AcknowledgmentNumber = SwapEndian_32(ConnectionInfo->SequenceNumberIn); ++ TCPHeaderOUT->DataOffset = (sizeof(TCP_Header_t) / sizeof(uint32_t)); ++ ++ if (!(ConnectionInfo->Buffer.InUse)) ++ TCPHeaderOUT->WindowSize = SwapEndian_16(TCP_WINDOW_SIZE); ++ else ++ TCPHeaderOUT->WindowSize = SwapEndian_16(TCP_WINDOW_SIZE - ConnectionInfo->Buffer.Length); ++ ++ TCPHeaderOUT->UrgentPointer = 0; ++ TCPHeaderOUT->Checksum = 0; ++ TCPHeaderOUT->Reserved = 0; ++ ++ TCPHeaderOUT->Checksum = TCP_Checksum16(TCPHeaderOUT, &IPHeaderIN->DestinationAddress, ++ &IPHeaderIN->SourceAddress, sizeof(TCP_Header_t)); ++ ++ return sizeof(TCP_Header_t); ++ } ++ ++ return NO_RESPONSE; ++} ++ ++/** Calculates the appropriate TCP checksum, consisting of the addition of the one's compliment of each word, ++ * complimented. ++ * ++ * \param[in] TCPHeaderOutStart Pointer to the start of the packet's outgoing TCP header ++ * \param[in] SourceAddress Source protocol IP address of the outgoing IP header ++ * \param[in] DestinationAddress Destination protocol IP address of the outgoing IP header ++ * \param[in] TCPOutSize Size in bytes of the TCP data header and payload ++ * ++ * \return A 16-bit TCP checksum value ++ */ ++static uint16_t TCP_Checksum16(void* TCPHeaderOutStart, ++ const IP_Address_t* SourceAddress, ++ const IP_Address_t* DestinationAddress, ++ uint16_t TCPOutSize) ++{ ++ uint32_t Checksum = 0; ++ ++ /* TCP/IP checksums are the addition of the one's compliment of each word including the IP pseudo-header, ++ complimented */ ++ ++ Checksum += ((uint16_t*)SourceAddress)[0]; ++ Checksum += ((uint16_t*)SourceAddress)[1]; ++ Checksum += ((uint16_t*)DestinationAddress)[0]; ++ Checksum += ((uint16_t*)DestinationAddress)[1]; ++ Checksum += SwapEndian_16(PROTOCOL_TCP); ++ Checksum += SwapEndian_16(TCPOutSize); ++ ++ for (uint16_t CurrWord = 0; CurrWord < (TCPOutSize >> 1); CurrWord++) ++ Checksum += ((uint16_t*)TCPHeaderOutStart)[CurrWord]; ++ ++ if (TCPOutSize & 0x01) ++ Checksum += (((uint16_t*)TCPHeaderOutStart)[TCPOutSize >> 1] & 0x00FF); ++ ++ while (Checksum & 0xFFFF0000) ++ Checksum = ((Checksum & 0xFFFF) + (Checksum >> 16)); ++ ++ return ~Checksum; ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/TCP.h index 000000000,000000000..b8eb4cfa1 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/TCP.h @@@ -1,0 -1,0 +1,260 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 TCP.c. ++ */ ++ ++#ifndef _TCP_H_ ++#define _TCP_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <stdbool.h> ++ ++ #include "EthernetProtocols.h" ++ #include "Ethernet.h" ++ #include "ProtocolDecoders.h" ++ ++ /* Macros: */ ++ /** Maximum number of TCP ports which can be open at the one time. */ ++ #define MAX_OPEN_TCP_PORTS 1 ++ ++ /** Maximum number of TCP connections which can be sustained at the one time. */ ++ #define MAX_TCP_CONNECTIONS 3 ++ ++ /** TCP window size, giving the maximum number of bytes which can be buffered at the one time. */ ++ #define TCP_WINDOW_SIZE 512 ++ ++ /** Port number for HTTP transmissions. */ ++ #define TCP_PORT_HTTP SwapEndian_16(80) ++ ++ /** Data direction indicator for a TCP application buffer, indicating data from host-to-device. */ ++ #define TCP_PACKETDIR_IN false ++ ++ /** Data direction indicator for a TCP application buffer, indicating data from device-to-host. */ ++ #define TCP_PACKETDIR_OUT true ++ ++ /** Congestion Window Reduced TCP flag mask. */ ++ #define TCP_FLAG_CWR (1 << 7) ++ ++ /** Explicit Congestion Notification TCP flag mask. */ ++ #define TCP_FLAG_ECE (1 << 6) ++ ++ /** Urgent TCP flag mask. */ ++ #define TCP_FLAG_URG (1 << 5) ++ ++ /** Data Acknowledge TCP flag mask. */ ++ #define TCP_FLAG_ACK (1 << 4) ++ ++ /** Data Push TCP flag mask. */ ++ #define TCP_FLAG_PSH (1 << 3) ++ ++ /** Reset TCP flag mask. */ ++ #define TCP_FLAG_RST (1 << 2) ++ ++ /** Synchronize TCP flag mask. */ ++ #define TCP_FLAG_SYN (1 << 1) ++ ++ /** Connection Finalize TCP flag mask. */ ++ #define TCP_FLAG_FIN (1 << 0) ++ ++ /** Application macro: Determines if the given application buffer contains a packet received from the host ++ * ++ * \param[in] Buffer Application buffer to check ++ * ++ * \return Boolean \c true if the buffer contains a packet from the host, \c false otherwise ++ */ ++ #define TCP_APP_HAS_RECEIVED_PACKET(Buffer) (Buffer->Ready && (Buffer->Direction == TCP_PACKETDIR_IN)) ++ ++ /** Application macro: Indicates if the application buffer is currently locked by the application for device-to-host transfers. ++ * ++ * \param[in] Buffer Application buffer to check ++ * ++ * \return Boolean \c true if the buffer has been captured by the application for device-to-host transmissions, \c false otherwise ++ */ ++ #define TCP_APP_HAVE_CAPTURED_BUFFER(Buffer) (!(Buffer->Ready) && Buffer->InUse && (Buffer->Direction == TCP_PACKETDIR_OUT)) ++ ++ /** Application macro: Indicates if the application can lock the buffer for multiple continued device-to-host transmissions. ++ * ++ * \param[in] Buffer Application buffer to check ++ * ++ * \return Boolean \c true if the buffer may be captured by the application for device-to-host transmissions, \c false otherwise ++ */ ++ #define TCP_APP_CAN_CAPTURE_BUFFER(Buffer) Buffer->InUse ++ ++ /** Application macro: Captures the application buffer, locking it for device-to-host transmissions only. This should be ++ * performed when the application needs to transmit several packets worth of data in succession with no interruptions from the host. ++ * ++ * \pre The application must check that the buffer can be locked first using TCP_APP_CAN_CAPTURE_BUFFER(). ++ * ++ * \param[in] Buffer Application buffer to lock ++ */ ++ #define TCP_APP_CAPTURE_BUFFER(Buffer) do { Buffer->Direction = TCP_PACKETDIR_OUT; Buffer->InUse = true; } while (0) ++ ++ /** Application macro: Releases a captured application buffer, allowing for host-to-device packets to be received. ++ * ++ * \param[in] Buffer Application buffer to release ++ */ ++ #define TCP_APP_RELEASE_BUFFER(Buffer) do { Buffer->InUse = false; } while (0) ++ ++ /** Application macro: Sends the contents of the given application buffer to the host. ++ * ++ * \param[in] Buffer Application buffer to send ++ * \param[in] Len Length of data contained in the buffer ++ */ ++ #define TCP_APP_SEND_BUFFER(Buffer, Len) do { Buffer->Direction = TCP_PACKETDIR_OUT; Buffer->Length = Len; Buffer->Ready = true; } while (0) ++ ++ /** Application macro: Clears the application buffer, ready for a packet to be written to it. ++ * ++ * \param[in] Buffer Application buffer to clear ++ */ ++ #define TCP_APP_CLEAR_BUFFER(Buffer) do { Buffer->Ready = false; Buffer->Length = 0; } while (0) ++ ++ /** Application macro: Closes an open connection to a host. ++ * ++ * \param[in] Connection Open TCP connection to close ++ */ ++ #define TCP_APP_CLOSECONNECTION(Connection) do { Connection->State = TCP_Connection_Closing; } while (0) ++ ++ /* Enums: */ ++ /** Enum for possible TCP port states. */ ++ enum TCP_PortStates_t ++ { ++ TCP_Port_Closed = 0, /**< TCP port closed, no connections to a host may be made on this port. */ ++ TCP_Port_Open = 1, /**< TCP port open, connections to a host may be made on this port. */ ++ }; ++ ++ /** Enum for possible TCP connection states. */ ++ enum TCP_ConnectionStates_t ++ { ++ TCP_Connection_Listen = 0, /**< Listening for a connection from a host */ ++ TCP_Connection_SYNSent = 1, /**< Unused */ ++ TCP_Connection_SYNReceived = 2, /**< SYN received, waiting for ACK */ ++ TCP_Connection_Established = 3, /**< Connection established in both directions */ ++ TCP_Connection_FINWait1 = 4, /**< Closing, waiting for ACK */ ++ TCP_Connection_FINWait2 = 5, /**< Closing, waiting for FIN ACK */ ++ TCP_Connection_CloseWait = 6, /**< Closing, waiting for ACK */ ++ TCP_Connection_Closing = 7, /**< Unused */ ++ TCP_Connection_LastACK = 8, /**< Unused */ ++ TCP_Connection_TimeWait = 9, /**< Unused */ ++ TCP_Connection_Closed = 10, /**< Connection closed in both directions */ ++ }; ++ ++ /* Type Defines: */ ++ /** Type define for a TCP connection buffer structure, including size, data and direction. */ ++ typedef struct ++ { ++ uint16_t Length; /**< Length of data in the TCP application buffer */ ++ uint8_t Data[TCP_WINDOW_SIZE]; /**< TCP application data buffer */ ++ bool Direction; /**< Buffer transmission direction, either TCP_PACKETDIR_IN or TCP_PACKETDIR_OUT */ ++ bool Ready; /**< If data from host, indicates buffer ready to be read, otherwise indicates ++ * buffer ready to be sent to the host ++ */ ++ bool InUse; /**< Indicates if the buffer is locked to to the current direction, and cannot be changed */ ++ } TCP_ConnectionBuffer_t; ++ ++ /** Type define for a TCP connection information structure. */ ++ typedef struct ++ { ++ uint32_t SequenceNumberIn; /**< Current TCP sequence number for host-to-device */ ++ uint32_t SequenceNumberOut; /**< Current TCP sequence number for device-to-host */ ++ TCP_ConnectionBuffer_t Buffer; /**< Connection application data buffer */ ++ } TCP_ConnectionInfo_t; ++ ++ /** Type define for a complete TCP connection state. */ ++ typedef struct ++ { ++ uint16_t Port; /**< Connection port number on the device */ ++ uint16_t RemotePort; /**< Connection port number on the host */ ++ IP_Address_t RemoteAddress; /**< Connection protocol IP address of the host */ ++ TCP_ConnectionInfo_t Info; /**< Connection information, including application buffer */ ++ uint8_t State; /**< Current connection state, a value from the \ref TCP_ConnectionStates_t enum */ ++ } TCP_ConnectionState_t; ++ ++ /** Type define for a TCP port state. */ ++ typedef struct ++ { ++ uint16_t Port; /**< TCP port number on the device */ ++ uint8_t State; /**< Current port state, a value from the \ref TCP_PortStates_t enum */ ++ void (*ApplicationHandler) (TCP_ConnectionState_t* ConnectionState, ++ TCP_ConnectionBuffer_t* Buffer); /**< Port application handler */ ++ } TCP_PortState_t; ++ ++ /** Type define for a TCP packet header. */ ++ typedef struct ++ { ++ uint16_t SourcePort; /**< Source port of the TCP packet */ ++ uint16_t DestinationPort; /**< Destination port of the TCP packet */ ++ ++ uint32_t SequenceNumber; /**< Data sequence number of the packet */ ++ uint32_t AcknowledgmentNumber; /**< Data acknowledgment number of the packet */ ++ ++ unsigned Reserved : 4; /**< Reserved, must be all 0 */ ++ unsigned DataOffset : 4; /**< Offset of the data from the start of the header, in 4 byte chunks */ ++ uint8_t Flags; /**< TCP packet flags */ ++ uint16_t WindowSize; /**< Current data window size (bytes remaining in reception buffer) */ ++ ++ uint16_t Checksum; /**< TCP checksum */ ++ uint16_t UrgentPointer; /**< Urgent data pointer */ ++ } TCP_Header_t; ++ ++ /* Function Prototypes: */ ++ void TCP_TCPTask(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfaceInfo, ++ Ethernet_Frame_Info_t* const FrameOUT); ++ void TCP_Init(void); ++ bool TCP_SetPortState(const uint16_t Port, ++ const uint8_t State, ++ void (*Handler)(TCP_ConnectionState_t*, TCP_ConnectionBuffer_t*)); ++ uint8_t TCP_GetPortState(const uint16_t Port); ++ bool TCP_SetConnectionState(const uint16_t Port, ++ const IP_Address_t* RemoteAddress, ++ const uint16_t RemotePort, ++ const uint8_t State); ++ uint8_t TCP_GetConnectionState(const uint16_t Port, ++ const IP_Address_t* RemoteAddress, ++ const uint16_t RemotePort); ++ TCP_ConnectionInfo_t* TCP_GetConnectionInfo(const uint16_t Port, ++ const IP_Address_t* RemoteAddress, ++ const uint16_t RemotePort); ++ int16_t TCP_ProcessTCPPacket(void* IPHeaderInStart, ++ void* TCPHeaderInStart, ++ void* TCPHeaderOutStart); ++ ++ #if defined(INCLUDE_FROM_TCP_C) ++ static uint16_t TCP_Checksum16(void* TCPHeaderOutStart, ++ const IP_Address_t* SourceAddress, ++ const IP_Address_t* DestinationAddress, ++ uint16_t TCPOutSize); ++ #endif ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/UDP.c index 000000000,000000000..03c19e00e new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/UDP.c @@@ -1,0 -1,0 +1,84 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * User Datagram Protocol (UDP) packet handling routines. This protocol handles high throughput, low ++ * reliability packets which are typically used to encapsulate streaming data. ++ */ ++ ++#define INCLUDE_FROM_UDP_C ++#include "UDP.h" ++ ++/** Processes a UDP packet inside an Ethernet frame, and writes the appropriate response ++ * to the output Ethernet frame if a sub-protocol handler has created a response packet. ++ * ++ * \param[in] IPHeaderInStart Pointer to the start of the incoming packet's IP header ++ * \param[in] UDPHeaderInStart Pointer to the start of the incoming packet's UDP header ++ * \param[out] UDPHeaderOutStart Pointer to the start of the outgoing packet's UDP header ++ * ++ * \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise ++ */ ++int16_t UDP_ProcessUDPPacket(void* IPHeaderInStart, ++ void* UDPHeaderInStart, ++ void* UDPHeaderOutStart) ++{ ++ UDP_Header_t* UDPHeaderIN = (UDP_Header_t*)UDPHeaderInStart; ++ UDP_Header_t* UDPHeaderOUT = (UDP_Header_t*)UDPHeaderOutStart; ++ ++ int16_t RetSize = NO_RESPONSE; ++ ++ DecodeUDPHeader(UDPHeaderInStart); ++ ++ switch (SwapEndian_16(UDPHeaderIN->DestinationPort)) ++ { ++ case UDP_PORT_DHCP_REQUEST: ++ RetSize = DHCP_ProcessDHCPPacket(IPHeaderInStart, ++ &((uint8_t*)UDPHeaderInStart)[sizeof(UDP_Header_t)], ++ &((uint8_t*)UDPHeaderOutStart)[sizeof(UDP_Header_t)]); ++ break; ++ } ++ ++ /* Check to see if the protocol processing routine has filled out a response */ ++ if (RetSize > 0) ++ { ++ /* Fill out the response UDP packet header */ ++ UDPHeaderOUT->SourcePort = UDPHeaderIN->DestinationPort; ++ UDPHeaderOUT->DestinationPort = UDPHeaderIN->SourcePort; ++ UDPHeaderOUT->Checksum = 0; ++ UDPHeaderOUT->Length = SwapEndian_16(sizeof(UDP_Header_t) + RetSize); ++ ++ /* Return the size of the response so far */ ++ return (sizeof(UDP_Header_t) + RetSize); ++ } ++ ++ return NO_RESPONSE; ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/UDP.h index 000000000,000000000..459d8be40 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/UDP.h @@@ -1,0 -1,0 +1,70 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 UDP.c. ++ */ ++ ++#ifndef _UDP_H_ ++#define _UDP_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ ++ #include "EthernetProtocols.h" ++ #include "Ethernet.h" ++ #include "ProtocolDecoders.h" ++ #include "DHCP.h" ++ ++ /* Macros: */ ++ /** Source UDP port for a DHCP request. */ ++ #define UDP_PORT_DHCP_REQUEST 67 ++ ++ /** Destination UDP port for a DHCP reply. */ ++ #define UDP_PORT_DHCP_REPLY 68 ++ ++ /* Type Defines: */ ++ /** Type define for a UDP packet header. */ ++ typedef struct ++ { ++ uint16_t SourcePort; /**< Packet source port */ ++ uint16_t DestinationPort; /**< Packet destination port */ ++ uint16_t Length; /**< Total packet length, in bytes */ ++ uint16_t Checksum; /**< Optional UDP packet checksum */ ++ } UDP_Header_t; ++ ++ /* Function Prototypes: */ ++ int16_t UDP_ProcessUDPPacket(void* IPHeaderInStart, ++ void* UDPHeaderInStart, ++ void* UDPHeaderOutStart); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/Webserver.c index 000000000,000000000..be4c3a6f6 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/Webserver.c @@@ -1,0 -1,0 +1,203 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * Simple webserver application for demonstrating the RNDIS demo and TCP/IP stack. This ++ * application will serve up a static HTTP web page when requested by the host. ++ */ ++ ++#include "Webserver.h" ++ ++/** HTTP server response header, for transmission before the page contents. This indicates to the host that a page exists at the ++ * given location, and gives extra connection information. ++ */ ++const char HTTP200Header[] PROGMEM = "HTTP/1.1 200 OK\r\n" ++ "Server: LUFA RNDIS\r\n" ++ "Content-type: text/html\r\n" ++ "Connection: close\r\n\r\n"; ++ ++/** HTTP server response header, for transmission before a resource not found error. This indicates to the host that the given ++ * given URL is invalid, and gives extra error information. ++ */ ++const char HTTP404Header[] PROGMEM = "HTTP/1.1 404 Not Found\r\n" ++ "Server: LUFA RNDIS\r\n" ++ "Connection: close\r\n\r\n"; ++ ++/** HTTP page to serve to the host when a HTTP request is made. This page is too long for a single response, thus it is automatically ++ * broken up into smaller blocks and sent as a series of packets each time the webserver application callback is run. ++ */ ++const char HTTPPage[] PROGMEM = ++ "<html>" ++ " <head>" ++ " <title>" ++ " LUFA Webserver Demo" ++ " </title>" ++ " </head>" ++ " <body>" ++ " <h1>Hello from your USB AVR!</h1>" ++ " <p>" ++ " Hello! Welcome to the LUFA RNDIS Demo Webserver test page, running on your USB AVR via the LUFA library. This demonstrates the HTTP webserver, TCP/IP stack and RNDIS demo all running atop the LUFA USB stack." ++ " <br /><br />" ++ " <small>Project Information: <a href=\"http://www.lufa-lib.org\">http://www.lufa-lib.org</a>.</small>" ++ " <hr />" ++ " <i>LUFA Version: </i>" LUFA_VERSION_STRING ++ " </p>" ++ " </body>" ++ "</html>"; ++ ++ ++/** Initializes the Webserver application, opening the appropriate HTTP port in the TCP handler and registering the application ++ * callback routine for packets sent to the HTTP protocol port. ++ */ ++void Webserver_Init(void) ++{ ++ /* Open the HTTP port in the TCP protocol so that HTTP connections to the device can be established */ ++ TCP_SetPortState(TCP_PORT_HTTP, TCP_Port_Open, Webserver_ApplicationCallback); ++} ++ ++/** Indicates if a given request equals the given HTTP command. ++ * ++ * \param[in] RequestHeader HTTP request made by the host ++ * \param[in] Command HTTP command to compare the request to ++ * ++ * \return Boolean \c true if the command matches the request, \c false otherwise ++ */ ++static bool IsHTTPCommand(uint8_t* RequestHeader, ++ char* Command) ++{ ++ /* Returns true if the non null terminated string in RequestHeader matches the null terminated string Command */ ++ return (strncmp((char*)RequestHeader, Command, strlen(Command)) == 0); ++} ++ ++/** Application callback routine, executed each time the TCP processing task runs. This callback determines what request ++ * has been made (if any), and serves up appropriate responses. ++ * ++ * \param[in] ConnectionState Pointer to a TCP Connection State structure giving connection information ++ * \param[in,out] Buffer Pointer to the application's send/receive packet buffer ++ */ ++void Webserver_ApplicationCallback(TCP_ConnectionState_t* const ConnectionState, ++ TCP_ConnectionBuffer_t* const Buffer) ++{ ++ char* BufferDataStr = (char*)Buffer->Data; ++ static uint8_t PageBlock = 0; ++ ++ /* Check to see if a packet has been received on the HTTP port from a remote host */ ++ if (TCP_APP_HAS_RECEIVED_PACKET(Buffer)) ++ { ++ if (IsHTTPCommand(Buffer->Data, "GET")) ++ { ++ if (IsHTTPCommand(Buffer->Data, "GET / ")) ++ { ++ PageBlock = 0; ++ ++ /* Copy the HTTP 200 response header into the packet buffer */ ++ strcpy_P(BufferDataStr, HTTP200Header); ++ ++ /* Send the buffer contents to the host */ ++ TCP_APP_SEND_BUFFER(Buffer, strlen(BufferDataStr)); ++ ++ /* Lock the buffer to Device->Host transmissions only while we send the page contents */ ++ TCP_APP_CAPTURE_BUFFER(Buffer); ++ } ++ else ++ { ++ /* Copy the HTTP 404 response header into the packet buffer */ ++ strcpy_P(BufferDataStr, HTTP404Header); ++ ++ /* Send the buffer contents to the host */ ++ TCP_APP_SEND_BUFFER(Buffer, strlen(BufferDataStr)); ++ ++ /* All data sent, close the connection */ ++ TCP_APP_CLOSECONNECTION(ConnectionState); ++ } ++ } ++ else if (IsHTTPCommand(Buffer->Data, "HEAD")) ++ { ++ if (IsHTTPCommand(Buffer->Data, "HEAD / ")) ++ { ++ /* Copy the HTTP response header into the packet buffer */ ++ strcpy_P(BufferDataStr, HTTP200Header); ++ ++ /* Send the buffer contents to the host */ ++ TCP_APP_SEND_BUFFER(Buffer, strlen(BufferDataStr)); ++ } ++ else ++ { ++ /* Copy the HTTP response header into the packet buffer */ ++ strcpy_P(BufferDataStr, HTTP404Header); ++ ++ /* Send the buffer contents to the host */ ++ TCP_APP_SEND_BUFFER(Buffer, strlen(BufferDataStr)); ++ } ++ ++ /* All data sent, close the connection */ ++ TCP_APP_CLOSECONNECTION(ConnectionState); ++ } ++ else if (IsHTTPCommand(Buffer->Data, "TRACE")) ++ { ++ /* Echo the host's query back to the host */ ++ TCP_APP_SEND_BUFFER(Buffer, Buffer->Length); ++ ++ /* All data sent, close the connection */ ++ TCP_APP_CLOSECONNECTION(ConnectionState); ++ } ++ else ++ { ++ /* Unknown request, just clear the buffer (drop the packet) */ ++ TCP_APP_CLEAR_BUFFER(Buffer); ++ } ++ } ++ else if (TCP_APP_HAVE_CAPTURED_BUFFER(Buffer)) ++ { ++ uint16_t RemLength = strlen_P(&HTTPPage[PageBlock * HTTP_REPLY_BLOCK_SIZE]); ++ uint16_t Length; ++ ++ /* Determine the length of the loaded block */ ++ Length = ((RemLength > HTTP_REPLY_BLOCK_SIZE) ? HTTP_REPLY_BLOCK_SIZE : RemLength); ++ ++ /* Copy the next buffer sized block of the page to the packet buffer */ ++ strncpy_P(BufferDataStr, &HTTPPage[PageBlock * HTTP_REPLY_BLOCK_SIZE], Length); ++ ++ /* Send the buffer contents to the host */ ++ TCP_APP_SEND_BUFFER(Buffer, Length); ++ ++ /* Check to see if the entire page has been sent */ ++ if (PageBlock++ == (sizeof(HTTPPage) / HTTP_REPLY_BLOCK_SIZE)) ++ { ++ /* Unlock the buffer so that the host can fill it with future packets */ ++ TCP_APP_RELEASE_BUFFER(Buffer); ++ ++ /* Close the connection to the host */ ++ TCP_APP_CLOSECONNECTION(ConnectionState); ++ } ++ } ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/Webserver.h index 000000000,000000000..e8bb542c1 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/Webserver.h @@@ -1,0 -1,0 +1,57 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 Webserver.c. ++ */ ++ ++#ifndef _WEBSERVER_H_ ++#define _WEBSERVER_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/pgmspace.h> ++ ++ #include <LUFA/Version.h> ++ ++ #include "TCP.h" ++ ++ /* Macros: */ ++ /** Maximum size of a HTTP response per transmission */ ++ #define HTTP_REPLY_BLOCK_SIZE 128 ++ ++ /* Function Prototypes: */ ++ void Webserver_Init(void); ++ void Webserver_ApplicationCallback(TCP_ConnectionState_t* const ConnectionState, ++ TCP_ConnectionBuffer_t* const Buffer); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/RNDISEthernet.c index 000000000,000000000..aac1b146d new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/RNDISEthernet.c @@@ -1,0 -1,0 +1,179 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 RNDISEthernet demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "RNDISEthernet.h" ++ ++/** Message buffer for RNDIS messages processed by the RNDIS device class driver. */ ++static uint8_t RNDIS_Message_Buffer[192]; ++ ++/** Global to store the incoming frame from the host before it is processed by the device. */ ++static Ethernet_Frame_Info_t FrameIN; ++ ++/** Global to store the outgoing frame created in the device before it is sent to the host. */ ++static Ethernet_Frame_Info_t FrameOUT; ++ ++/** LUFA RNDIS Class driver interface configuration and state information. This structure is ++ * passed to all RNDIS Class driver functions, so that multiple instances of the same class ++ * within a device can be differentiated from one another. ++ */ ++USB_ClassInfo_RNDIS_Device_t Ethernet_RNDIS_Interface = ++ { ++ .Config = ++ { ++ .ControlInterfaceNumber = INTERFACE_ID_CDC_CCI, ++ .DataINEndpoint = ++ { ++ .Address = CDC_TX_EPADDR, ++ .Size = CDC_TXRX_EPSIZE, ++ .Banks = 1, ++ }, ++ .DataOUTEndpoint = ++ { ++ .Address = CDC_RX_EPADDR, ++ .Size = CDC_TXRX_EPSIZE, ++ .Banks = 1, ++ }, ++ .NotificationEndpoint = ++ { ++ .Address = CDC_NOTIFICATION_EPADDR, ++ .Size = CDC_NOTIFICATION_EPSIZE, ++ .Banks = 1, ++ }, ++ .AdapterVendorDescription = "LUFA RNDIS Demo Adapter", ++ .AdapterMACAddress = {ADAPTER_MAC_ADDRESS}, ++ .MessageBuffer = RNDIS_Message_Buffer, ++ .MessageBufferLength = sizeof(RNDIS_Message_Buffer), ++ }, ++ }; ++ ++ ++/** 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(); ++ ++ TCP_Init(); ++ Webserver_Init(); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ if (RNDIS_Device_IsPacketReceived(&Ethernet_RNDIS_Interface)) ++ { ++ LEDs_SetAllLEDs(LEDMASK_USB_BUSY); ++ ++ RNDIS_Device_ReadPacket(&Ethernet_RNDIS_Interface, &FrameIN.FrameData, &FrameIN.FrameLength); ++ Ethernet_ProcessPacket(&FrameIN, &FrameOUT); ++ ++ if (FrameOUT.FrameLength) ++ { ++ RNDIS_Device_SendPacket(&Ethernet_RNDIS_Interface, &FrameOUT.FrameData, FrameOUT.FrameLength); ++ FrameOUT.FrameLength = 0; ++ } ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++ } ++ ++ TCP_TCPTask(&Ethernet_RNDIS_Interface, &FrameOUT); ++ ++ RNDIS_Device_USBTask(&Ethernet_RNDIS_Interface); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#elif (ARCH == ARCH_XMEGA) ++ /* Start the PLL to multiply the 2MHz RC oscillator to 32MHz and switch the CPU core to run from it */ ++ XMEGACLK_StartPLL(CLOCK_SRC_INT_RC2MHZ, 2000000, F_CPU); ++ XMEGACLK_SetCPUClockSource(CLOCK_SRC_PLL); ++ ++ /* Start the 32MHz internal RC oscillator and start the DFLL to increase it to 48MHz using the USB SOF as a reference */ ++ XMEGACLK_StartInternalOscillator(CLOCK_SRC_INT_RC32MHZ); ++ XMEGACLK_StartDFLL(CLOCK_SRC_INT_RC32MHZ, DFLL_REF_INT_USBSOF, F_USB); ++ ++ PMIC.CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm; ++#endif ++ ++ /* Hardware Initialization */ ++ LEDs_Init(); ++ Serial_Init(9600, false); ++ USB_Init(); ++ ++ /* Create a stdio stream for the serial port for stdin and stdout */ ++ Serial_CreateStream(NULL); ++} ++ ++/** 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) ++{ ++ bool ConfigSuccess = true; ++ ++ ConfigSuccess &= RNDIS_Device_ConfigureEndpoints(&Ethernet_RNDIS_Interface); ++ ++ LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); ++} ++ ++/** Event handler for the library USB Control Request reception event. */ ++void EVENT_USB_Device_ControlRequest(void) ++{ ++ RNDIS_Device_ProcessControlRequest(&Ethernet_RNDIS_Interface); ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/RNDISEthernet.h index 000000000,000000000..ab2488b77 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/RNDISEthernet.h @@@ -1,0 -1,0 +1,84 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 RNDISEthernet.c. ++ */ ++ ++#ifndef _RNDISETHERNET_H_ ++#define _RNDISETHERNET_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <string.h> ++ ++ #include "Descriptors.h" ++ ++ #include "Lib/Ethernet.h" ++ #include "Lib/TCP.h" ++ #include "Lib/ARP.h" ++ #include "Lib/Webserver.h" ++ #include "Config/AppConfig.h" ++ ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/Peripheral/Serial.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Platform/Platform.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) ++ ++ /** LED mask for the library LED driver, to indicate that the USB interface is busy. */ ++ #define LEDMASK_USB_BUSY LEDS_LED2 ++ ++ /* Function Prototypes: */ ++ void SetupHardware(void); ++ ++ void EVENT_USB_Device_Connect(void); ++ void EVENT_USB_Device_Disconnect(void); ++ void EVENT_USB_Device_ConfigurationChanged(void); ++ void EVENT_USB_Device_ControlRequest(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/RNDISEthernet.txt index 000000000,000000000..a2c2ac604 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/RNDISEthernet.txt @@@ -1,0 -1,0 +1,146 @@@ ++/** \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 RNDIS Class Ethernet Demo (with Webserver/Telnet) ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * \li Series 6 USB AVRs (AT90USBxxx6) ++ * \li Series AU XMEGA AVRs (ATXMEGAxxxAxU) ++ * \li Series B XMEGA AVRs (ATXMEGAxxxBx) ++ * \li Series C XMEGA AVRs (ATXMEGAxxxCx) ++ * ++ * \section Sec_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> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>Remote NDIS (Microsoft Proprietary CDC Class Networking Standard)</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>Microsoft RNDIS Specification</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Remote Network Driver Interface demonstration application. ++ * This gives a simple reference application for implementing ++ * a CDC RNDIS device acting as a simple network interface for ++ * ethernet packet exchange. RNDIS is a proprietary Microsoft ++ * standard; this demo will only work on Windows 2000 (manually ++ * patched with the Microsoft RNDIS hotfix) and above (with no ++ * manual patches), or on the latest Linux kernels. ++ * ++ * Before running, you will need to install the INF file that ++ * is located in the RNDISEthernet project directory. This will ++ * enable Windows to use its inbuilt RNDIS drivers, negating the ++ * need for special Windows drivers for the device. To install, ++ * right-click the .INF file and choose the Install option. If ++ * Windows 2000 is used, the Microsoft INF file in the hotfix ++ * will need to be altered to use the VID/PID of the demo and ++ * then chosen instead of the LUFA RNDIS INF file when prompted. ++ * ++ * When enumerated, this demo will install as a new network ++ * adapter which ethernet packets can be sent to and received ++ * from. Running on top of the adapter is a very simple TCP/IP ++ * stack with a HTTP webserver and TELNET host which can be ++ * accessed through a web browser at IP address 10.0.0.2:80 or ++ * through a TELNET client at 10.0.0.2:25. This device also supports ++ * ping echos via the ICMP protocol. ++ * ++ * \note The TCP/IP stack in this demo has a number of limitations ++ * and should serve as an example only - it is not fully featured nor ++ * compliant to the TCP/IP specification. For complete projects, it is ++ * recommended that it be replaced with an external open source TCP/IP ++ * stack that is feature complete, such as the uIP stack. ++ * ++ * \section Sec_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> ++ * <th><b>Define Name:</b></th> ++ * <th><b>Location:</b></th> ++ * <th><b>Description:</b></th> ++ * </tr> ++ * <tr> ++ * <td>CLIENT_IP_ADDRESS</td> ++ * <td>AppConfig.h</td> ++ * <td>Configures the IP address given to the client (PC) via the DHCP server.</td> ++ * </tr> ++ * <tr> ++ * <td>SERVER_IP_ADDRESS</td> ++ * <td>AppConfig.h</td> ++ * <td>Configures the IP address of the virtual server.</td> ++ * </tr> ++ * <tr> ++ * <td>ADAPTER_MAC_ADDRESS</td> ++ * <td>AppConfig.h</td> ++ * <td>Configures the MAC address of the RNDIS adapter on the host (PC) side.</td> ++ * </tr> ++ * <tr> ++ * <td>SERVER_MAC_ADDRESS</td> ++ * <td>AppConfig.h</td> ++ * <td>Configures the MAC address of the virtual server on the network.</td> ++ * </tr> ++ * <tr> ++ * <td>NO_DECODE_ETHERNET</td> ++ * <td>AppConfig.h</td> ++ * <td>When defined, received Ethernet headers will not be decoded and printed to the device serial port.</td> ++ * </tr> ++ * <tr> ++ * <td>NO_DECODE_ARP</td> ++ * <td>AppConfig.h</td> ++ * <td>When defined, received ARP headers will not be decoded and printed to the device serial port.</td> ++ * </tr> ++ * <tr> ++ * <td>NO_DECODE_IP</td> ++ * <td>AppConfig.h</td> ++ * <td>When defined, received IP headers will not be decoded and printed to the device serial port.</td> ++ * </tr> ++ * <tr> ++ * <td>NO_DECODE_ICMP</td> ++ * <td>AppConfig.h</td> ++ * <td>When defined, received ICMP headers will not be decoded and printed to the device serial port.</td> ++ * </tr> ++ * <tr> ++ * <td>NO_DECODE_TCP</td> ++ * <td>AppConfig.h</td> ++ * <td>When defined, received TCP headers will not be decoded and printed to the device serial port.</td> ++ * </tr> ++ * <tr> ++ * <td>NO_DECODE_UDP</td> ++ * <td>AppConfig.h</td> ++ * <td>When defined, received UDP headers will not be decoded and printed to the device serial port.</td> ++ * </tr> ++ * <tr> ++ * <td>NO_DECODE_DHCP</td> ++ * <td>AppConfig.h</td> ++ * <td>When defined, received DHCP headers will not be decoded and printed to the device serial port.</td> ++ * </tr> ++ * </table> ++ */ ++ diff --cc lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/asf.xml index 000000000,000000000..e871a8799 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/asf.xml @@@ -1,0 -1,0 +1,84 @@@ ++<asf xmlversion="1.0"> ++ <project caption="RNDIS Ethernet Device Demo (Class Driver APIs)" id="lufa.demos.device.class.rndis.example.avr8"> ++ <require idref="lufa.demos.device.class.rndis"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <project caption="RNDIS Ethernet Device Demo (Class Driver APIs)" id="lufa.demos.device.class.rndis.example.xmega"> ++ <require idref="lufa.demos.device.class.rndis"/> ++ <require idref="lufa.boards.dummy.xmega"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atxmega128a1u"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="32000000UL"/> ++ <build type="define" name="F_USB" value="48000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.device.class.rndis" caption="RNDIS Ethernet Device Demo (Class Driver APIs)"> ++ <info type="description" value="summary"> ++ Microsoft RNDIS Ethernet networking device demo, implementing a basic HTTP webserver. This demo uses the user-friendly USB Class Driver APIs to provide a simple, abstracted interface into the USB stack. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Class Driver APIs"/> ++ <keyword value="USB Device"/> ++ <keyword value="RNDIS Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="RNDISEthernet.txt"/> ++ <build type="distribute" subtype="user-file" value="LUFA RNDIS.inf"/> ++ ++ <build type="c-source" value="RNDISEthernet.c"/> ++ <build type="c-source" value="Descriptors.c"/> ++ <build type="c-source" value="Lib/ARP.c"/> ++ <build type="c-source" value="Lib/DHCP.c"/> ++ <build type="c-source" value="Lib/Ethernet.c"/> ++ <build type="c-source" value="Lib/ICMP.c"/> ++ <build type="c-source" value="Lib/IP.c"/> ++ <build type="c-source" value="Lib/ProtocolDecoders.c"/> ++ <build type="c-source" value="Lib/TCP.c"/> ++ <build type="c-source" value="Lib/UDP.c"/> ++ <build type="c-source" value="Lib/Webserver.c"/> ++ <build type="header-file" value="RNDISEthernet.h"/> ++ <build type="header-file" value="Descriptors.h"/> ++ <build type="header-file" value="Lib/ARP.h"/> ++ <build type="header-file" value="Lib/DHCP.h"/> ++ <build type="header-file" value="Lib/Ethernet.h"/> ++ <build type="header-file" value="Lib/ICMP.h"/> ++ <build type="header-file" value="Lib/IP.h"/> ++ <build type="header-file" value="Lib/ProtocolDecoders.h"/> ++ <build type="header-file" value="Lib/TCP.h"/> ++ <build type="header-file" value="Lib/UDP.h"/> ++ <build type="header-file" value="Lib/Webserver.h"/> ++ <build type="header-file" value="Lib/EthernetProtocols.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="module-config" subtype="required-header-file" value="AppConfig.h"/> ++ <build type="header-file" value="Config/AppConfig.h"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ <require idref="lufa.drivers.peripheral.usart"/> ++ <require idref="lufa.drivers.misc.ansi"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/doxyfile index 000000000,000000000..29d07c317 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - RNDIS Ethernet 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/makefile index 000000000,000000000..c6a3a54a4 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/makefile @@@ -1,0 -1,0 +1,44 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = RNDISEthernet ++SRC = $(TARGET).c Descriptors.c Lib/Ethernet.c Lib/ProtocolDecoders.c Lib/ICMP.c Lib/TCP.c Lib/UDP.c Lib/DHCP.c Lib/ARP.c \ ++ Lib/IP.c Lib/Webserver.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) $(LUFA_SRC_SERIAL) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Device/ClassDriver/VirtualSerial/Config/LUFAConfig.h index 000000000,000000000..0ec4635eb new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/VirtualSerial/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,126 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++ #define USB_DEVICE_ONLY ++// #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++ #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #elif (ARCH == ARCH_XMEGA) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_RC32MCLKSRC | USB_OPT_BUSEVENT_PRIHIGH) ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++ #define MAX_ENDPOINT_INDEX 4 ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Device/ClassDriver/VirtualSerial/Descriptors.c index 000000000,000000000..5ec042cb0 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/VirtualSerial/Descriptors.c @@@ -1,0 -1,0 +1,245 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special ++ * computer-readable structures which the host requests upon device enumeration, to determine ++ * the device's capabilities and functions. ++ */ ++ ++#include "Descriptors.h" ++ ++ ++/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall ++ * device characteristics, including the supported USB version, control endpoint size and the ++ * number of device configurations. The descriptor is read out by the USB host when the enumeration ++ * process begins. ++ */ ++const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = ++{ ++ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, ++ ++ .USBSpecification = VERSION_BCD(1,1,0), ++ .Class = CDC_CSCP_CDCClass, ++ .SubClass = CDC_CSCP_NoSpecificSubclass, ++ .Protocol = CDC_CSCP_NoSpecificProtocol, ++ ++ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, ++ ++ .VendorID = 0x03EB, ++ .ProductID = 0x2044, ++ .ReleaseNumber = VERSION_BCD(0,0,1), ++ ++ .ManufacturerStrIndex = STRING_ID_Manufacturer, ++ .ProductStrIndex = STRING_ID_Product, ++ .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. ++ */ ++const 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 = 2, ++ ++ .ConfigurationNumber = 1, ++ .ConfigurationStrIndex = NO_DESCRIPTOR, ++ ++ .ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED), ++ ++ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) ++ }, ++ ++ .CDC_CCI_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_CDC_CCI, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 1, ++ ++ .Class = CDC_CSCP_CDCClass, ++ .SubClass = CDC_CSCP_ACMSubclass, ++ .Protocol = CDC_CSCP_ATCommandProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .CDC_Functional_Header = ++ { ++ .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface}, ++ .Subtype = CDC_DSUBTYPE_CSInterface_Header, ++ ++ .CDCSpecification = VERSION_BCD(1,1,0), ++ }, ++ ++ .CDC_Functional_ACM = ++ { ++ .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface}, ++ .Subtype = CDC_DSUBTYPE_CSInterface_ACM, ++ ++ .Capabilities = 0x06, ++ }, ++ ++ .CDC_Functional_Union = ++ { ++ .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface}, ++ .Subtype = CDC_DSUBTYPE_CSInterface_Union, ++ ++ .MasterInterfaceNumber = INTERFACE_ID_CDC_CCI, ++ .SlaveInterfaceNumber = INTERFACE_ID_CDC_DCI, ++ }, ++ ++ .CDC_NotificationEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = CDC_NOTIFICATION_EPADDR, ++ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = CDC_NOTIFICATION_EPSIZE, ++ .PollingIntervalMS = 0xFF ++ }, ++ ++ .CDC_DCI_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_CDC_DCI, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 2, ++ ++ .Class = CDC_CSCP_CDCDataClass, ++ .SubClass = CDC_CSCP_NoDataSubclass, ++ .Protocol = CDC_CSCP_NoDataProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .CDC_DataOutEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = CDC_RX_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = CDC_TXRX_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++ ++ .CDC_DataInEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = CDC_TX_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = CDC_TXRX_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ } ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_String_t PROGMEM LanguageString = USB_STRING_DESCRIPTOR_ARRAY(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"LUFA CDC 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 uint16_t wIndex, ++ const void** const DescriptorAddress) ++{ ++ const uint8_t DescriptorType = (wValue >> 8); ++ const uint8_t DescriptorNumber = (wValue & 0xFF); ++ ++ const void* Address = NULL; ++ uint16_t Size = NO_DESCRIPTOR; ++ ++ switch (DescriptorType) ++ { ++ case DTYPE_Device: ++ Address = &DeviceDescriptor; ++ Size = sizeof(USB_Descriptor_Device_t); ++ break; ++ case DTYPE_Configuration: ++ Address = &ConfigurationDescriptor; ++ Size = sizeof(USB_Descriptor_Configuration_t); ++ break; ++ case DTYPE_String: ++ switch (DescriptorNumber) ++ { ++ case STRING_ID_Language: ++ Address = &LanguageString; ++ Size = pgm_read_byte(&LanguageString.Header.Size); ++ break; ++ case STRING_ID_Manufacturer: ++ Address = &ManufacturerString; ++ Size = pgm_read_byte(&ManufacturerString.Header.Size); ++ break; ++ case STRING_ID_Product: ++ Address = &ProductString; ++ Size = pgm_read_byte(&ProductString.Header.Size); ++ break; ++ } ++ ++ break; ++ } ++ ++ *DescriptorAddress = Address; ++ return Size; ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/VirtualSerial/Descriptors.h index 000000000,000000000..5b4bf2aa7 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/VirtualSerial/Descriptors.h @@@ -1,0 -1,0 +1,110 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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> ++ ++ /* Macros: */ ++ /** Endpoint address of the CDC device-to-host notification IN endpoint. */ ++ #define CDC_NOTIFICATION_EPADDR (ENDPOINT_DIR_IN | 2) ++ ++ /** Endpoint address of the CDC device-to-host data IN endpoint. */ ++ #define CDC_TX_EPADDR (ENDPOINT_DIR_IN | 3) ++ ++ /** Endpoint address of the CDC host-to-device data OUT endpoint. */ ++ #define CDC_RX_EPADDR (ENDPOINT_DIR_OUT | 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 ++ ++ /* 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; ++ ++ // CDC Control Interface ++ USB_Descriptor_Interface_t CDC_CCI_Interface; ++ USB_CDC_Descriptor_FunctionalHeader_t CDC_Functional_Header; ++ USB_CDC_Descriptor_FunctionalACM_t CDC_Functional_ACM; ++ USB_CDC_Descriptor_FunctionalUnion_t CDC_Functional_Union; ++ USB_Descriptor_Endpoint_t CDC_NotificationEndpoint; ++ ++ // CDC Data Interface ++ USB_Descriptor_Interface_t CDC_DCI_Interface; ++ USB_Descriptor_Endpoint_t CDC_DataOutEndpoint; ++ USB_Descriptor_Endpoint_t CDC_DataInEndpoint; ++ } USB_Descriptor_Configuration_t; ++ ++ /** Enum for the device interface descriptor IDs within the device. Each interface descriptor ++ * should have a unique ID index associated with it, which can be used to refer to the ++ * interface from other descriptors. ++ */ ++ enum InterfaceDescriptors_t ++ { ++ INTERFACE_ID_CDC_CCI = 0, /**< CDC CCI interface descriptor ID */ ++ INTERFACE_ID_CDC_DCI = 1, /**< CDC DCI interface descriptor ID */ ++ }; ++ ++ /** Enum for the device string descriptor IDs within the device. Each string descriptor should ++ * have a unique ID index associated with it, which can be used to refer to the string from ++ * other descriptors. ++ */ ++ enum StringDescriptors_t ++ { ++ STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */ ++ STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */ ++ STRING_ID_Product = 2, /**< Product string ID */ ++ }; ++ ++ /* Function Prototypes: */ ++ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ++ const uint16_t wIndex, ++ const void** const DescriptorAddress) ++ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/VirtualSerial/LUFA VirtualSerial.inf index 000000000,000000000..21d2d12b6 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/VirtualSerial/LUFA VirtualSerial.inf @@@ -1,0 -1,0 +1,66 @@@ ++;************************************************************ ++; Windows USB CDC ACM Setup File ++; Copyright (c) 2000 Microsoft Corporation ++;************************************************************ ++ ++[DefaultInstall] ++CopyINF="LUFA VirtualSerial.inf" ++ ++[Version] ++Signature="$Windows NT$" ++Class=Ports ++ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} ++Provider=%MFGNAME% ++DriverVer=7/1/2012,10.0.0.0 ++ ++[Manufacturer] ++%MFGNAME%=DeviceList, NTx86, NTamd64, NTia64 ++ ++[SourceDisksNames] ++ ++[SourceDisksFiles] ++ ++[DestinationDirs] ++DefaultDestDir=12 ++ ++[DriverInstall] ++Include=mdmcpq.inf ++CopyFiles=FakeModemCopyFileSection ++AddReg=DriverInstall.AddReg ++ ++[DriverInstall.Services] ++Include=mdmcpq.inf ++AddService=usbser, 0x00000002, LowerFilter_Service_Inst ++ ++[DriverInstall.AddReg] ++HKR,,EnumPropPages32,,"msports.dll,SerialPortPropPageProvider" ++ ++;------------------------------------------------------------------------------ ++; 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. ++;------------------------------------------------------------------------------ ++[DeviceList] ++%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_2044 ++ ++[DeviceList.NTx86] ++%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_2044 ++ ++[DeviceList.NTamd64] ++%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_2044 ++ ++[DeviceList.NTia64] ++%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_2044 ++ ++;------------------------------------------------------------------------------ ++; String Definitions ++;------------------------------------------------------------------------------ ++;Modify these strings to customize your device ++;------------------------------------------------------------------------------ ++[Strings] ++MFGNAME="http://www.lufa-lib.org" ++DESCRIPTION="LUFA CDC-ACM Virtual Serial Port" diff --cc lib/lufa/Demos/Device/ClassDriver/VirtualSerial/VirtualSerial.c index 000000000,000000000..a3d419ae5 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/VirtualSerial/VirtualSerial.c @@@ -1,0 -1,0 +1,202 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 VirtualSerial demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "VirtualSerial.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 = INTERFACE_ID_CDC_CCI, ++ .DataINEndpoint = ++ { ++ .Address = CDC_TX_EPADDR, ++ .Size = CDC_TXRX_EPSIZE, ++ .Banks = 1, ++ }, ++ .DataOUTEndpoint = ++ { ++ .Address = CDC_RX_EPADDR, ++ .Size = CDC_TXRX_EPSIZE, ++ .Banks = 1, ++ }, ++ .NotificationEndpoint = ++ { ++ .Address = CDC_NOTIFICATION_EPADDR, ++ .Size = CDC_NOTIFICATION_EPSIZE, ++ .Banks = 1, ++ }, ++ }, ++ }; ++ ++/** Standard file stream for the CDC interface when set up, so that the virtual CDC COM port can be ++ * used like any regular character stream in the C APIs. ++ */ ++static FILE USBSerialStream; ++ ++ ++/** 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(); ++ ++ /* Create a regular character stream for the interface so that it can be used with the stdio.h functions */ ++ CDC_Device_CreateStream(&VirtualSerial_CDC_Interface, &USBSerialStream); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ CheckJoystickMovement(); ++ ++ /* Must throw away unused bytes from the host, or it will lock up while waiting for the device */ ++ CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface); ++ ++ CDC_Device_USBTask(&VirtualSerial_CDC_Interface); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#elif (ARCH == ARCH_XMEGA) ++ /* Start the PLL to multiply the 2MHz RC oscillator to 32MHz and switch the CPU core to run from it */ ++ XMEGACLK_StartPLL(CLOCK_SRC_INT_RC2MHZ, 2000000, F_CPU); ++ XMEGACLK_SetCPUClockSource(CLOCK_SRC_PLL); ++ ++ /* Start the 32MHz internal RC oscillator and start the DFLL to increase it to 48MHz using the USB SOF as a reference */ ++ XMEGACLK_StartInternalOscillator(CLOCK_SRC_INT_RC32MHZ); ++ XMEGACLK_StartDFLL(CLOCK_SRC_INT_RC32MHZ, DFLL_REF_INT_USBSOF, F_USB); ++ ++ PMIC.CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm; ++#endif ++ ++ /* 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; ++ ++ /* Write the string to the virtual COM port via the created character stream */ ++ fputs(ReportString, &USBSerialStream); ++ ++ /* Alternatively, without the stream: */ ++ // CDC_Device_SendString(&VirtualSerial_CDC_Interface, 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) ++{ ++ bool ConfigSuccess = true; ++ ++ ConfigSuccess &= CDC_Device_ConfigureEndpoints(&VirtualSerial_CDC_Interface); ++ ++ LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); ++} ++ ++/** Event handler for the library USB Control Request reception event. */ ++void EVENT_USB_Device_ControlRequest(void) ++{ ++ CDC_Device_ProcessControlRequest(&VirtualSerial_CDC_Interface); ++} ++ ++/** CDC class driver callback function the processing of changes to the virtual ++ * control lines sent from the host.. ++ * ++ * \param[in] CDCInterfaceInfo Pointer to the CDC class interface configuration structure being referenced ++ */ ++void EVENT_CDC_Device_ControLineStateChanged(USB_ClassInfo_CDC_Device_t *const CDCInterfaceInfo) ++{ ++ /* You can get changes to the virtual CDC lines in this callback; a common ++ use-case is to use the Data Terminal Ready (DTR) flag to enable and ++ disable CDC communications in your application when set to avoid the ++ application blocking while waiting for a host to become ready and read ++ in the pending data from the USB endpoints. ++ */ ++ bool HostReady = (CDCInterfaceInfo->State.ControlLineStates.HostToDevice & CDC_CONTROL_LINE_OUT_DTR) != 0; ++} diff --cc lib/lufa/Demos/Device/ClassDriver/VirtualSerial/VirtualSerial.h index 000000000,000000000..89f809982 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/VirtualSerial/VirtualSerial.h @@@ -1,0 -1,0 +1,77 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 VirtualSerial.c. ++ */ ++ ++#ifndef _VIRTUALSERIAL_H_ ++#define _VIRTUALSERIAL_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <string.h> ++ #include <stdio.h> ++ ++ #include "Descriptors.h" ++ ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/Board/Joystick.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Platform/Platform.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_ControlRequest(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/VirtualSerial/VirtualSerial.txt index 000000000,000000000..c802d9950 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/VirtualSerial/VirtualSerial.txt @@@ -1,0 -1,0 +1,76 @@@ ++/** \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 Communications Device Class (Virtual Serial Port) Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * \li Series 6 USB AVRs (AT90USBxxx6) ++ * \li Series 4 USB AVRs (ATMEGAxxU4) ++ * \li Series 2 USB AVRs (AT90USBxx2, ATMEGAxxU2) ++ * \li Series AU XMEGA AVRs (ATXMEGAxxxAxU) ++ * \li Series B XMEGA AVRs (ATXMEGAxxxBx) ++ * \li Series C XMEGA AVRs (ATXMEGAxxxCx) ++ * ++ * \section Sec_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> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>Abstract Control Model (ACM)</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF CDC Class Standard</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Communications Device Class demonstration application. ++ * This gives a simple reference application for implementing ++ * a CDC device acting as a virtual serial port. Joystick ++ * actions are transmitted to the host as strings. 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 Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Device/ClassDriver/VirtualSerial/asf.xml index 000000000,000000000..4839b7c5f new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/VirtualSerial/asf.xml @@@ -1,0 -1,0 +1,62 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Virtual Serial CDC Device Demo (Class Driver APIs)" id="lufa.demos.device.class.cdc.example.avr8"> ++ <require idref="lufa.demos.device.class.cdc"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <project caption="Virtual Serial CDC Device Demo (Class Driver APIs)" id="lufa.demos.device.class.cdc.example.xmega"> ++ <require idref="lufa.demos.device.class.cdc"/> ++ <require idref="lufa.boards.dummy.xmega"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atxmega128a1u"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="32000000UL"/> ++ <build type="define" name="F_USB" value="48000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.device.class.cdc" caption="Virtual Serial CDC Device Demo (Class Driver APIs)"> ++ <info type="description" value="summary"> ++ Virtual Serial device demo, implementing a virtual serial channel between the host PC and the device. This demo uses the user-friendly USB Class Driver APIs to provide a simple, abstracted interface into the USB stack. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Class Driver APIs"/> ++ <keyword value="USB Device"/> ++ <keyword value="CDC Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="VirtualSerial.txt"/> ++ <build type="distribute" subtype="user-file" value="LUFA VirtualSerial.inf"/> ++ ++ <build type="c-source" value="VirtualSerial.c"/> ++ <build type="c-source" value="Descriptors.c"/> ++ <build type="header-file" value="VirtualSerial.h"/> ++ <build type="header-file" value="Descriptors.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ <require idref="lufa.drivers.board.joystick"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Device/ClassDriver/VirtualSerial/doxyfile index 000000000,000000000..aa21df582 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/VirtualSerial/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Virtual Serial 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Device/ClassDriver/VirtualSerial/makefile index 000000000,000000000..f0f73257a new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/VirtualSerial/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = VirtualSerial ++SRC = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Device/ClassDriver/VirtualSerialMassStorage/Config/AppConfig.h index 000000000,000000000..b18b2c414 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/VirtualSerialMassStorage/Config/AppConfig.h @@@ -1,0 -1,0 +1,50 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief Application Configuration Header File ++ * ++ * This is a header file which is be used to configure some of ++ * the application's compile time options, as an alternative to ++ * specifying the compile time constants supplied through a ++ * makefile or build system. ++ * ++ * For information on what each token does, refer to the ++ * \ref Sec_Options section of the application documentation. ++ */ ++ ++#ifndef _APP_CONFIG_H_ ++#define _APP_CONFIG_H_ ++ ++ #define TOTAL_LUNS 1 ++ ++ #define DISK_READ_ONLY false ++ ++#endif diff --cc lib/lufa/Demos/Device/ClassDriver/VirtualSerialMassStorage/Config/LUFAConfig.h index 000000000,000000000..62549878d new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/VirtualSerialMassStorage/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,126 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++ #define USB_DEVICE_ONLY ++// #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++ #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #elif (ARCH == ARCH_XMEGA) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_RC32MCLKSRC | USB_OPT_BUSEVENT_PRIHIGH) ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++ #define MAX_ENDPOINT_INDEX 5 ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Device/ClassDriver/VirtualSerialMassStorage/Descriptors.c index 000000000,000000000..9c8792c33 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/VirtualSerialMassStorage/Descriptors.c @@@ -1,0 -1,0 +1,295 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special ++ * computer-readable structures which the host requests upon device enumeration, to determine ++ * the device's capabilities and functions. ++ */ ++ ++#include "Descriptors.h" ++ ++ ++/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall ++ * device characteristics, including the supported USB version, control endpoint size and the ++ * number of device configurations. The descriptor is read out by the USB host when the enumeration ++ * process begins. ++ */ ++const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = ++{ ++ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, ++ ++ .USBSpecification = VERSION_BCD(1,1,0), ++ .Class = USB_CSCP_IADDeviceClass, ++ .SubClass = USB_CSCP_IADDeviceSubclass, ++ .Protocol = USB_CSCP_IADDeviceProtocol, ++ ++ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, ++ ++ .VendorID = 0x03EB, ++ .ProductID = 0x2068, ++ .ReleaseNumber = VERSION_BCD(0,0,1), ++ ++ .ManufacturerStrIndex = STRING_ID_Manufacturer, ++ .ProductStrIndex = STRING_ID_Product, ++ .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. ++ */ ++const 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_RESERVED | USB_CONFIG_ATTR_SELFPOWERED), ++ ++ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) ++ }, ++ ++ .CDC_IAD = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation}, ++ ++ .FirstInterfaceIndex = INTERFACE_ID_CDC_CCI, ++ .TotalInterfaces = 2, ++ ++ .Class = CDC_CSCP_CDCClass, ++ .SubClass = CDC_CSCP_ACMSubclass, ++ .Protocol = CDC_CSCP_ATCommandProtocol, ++ ++ .IADStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .CDC_CCI_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_CDC_CCI, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 1, ++ ++ .Class = CDC_CSCP_CDCClass, ++ .SubClass = CDC_CSCP_ACMSubclass, ++ .Protocol = CDC_CSCP_ATCommandProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .CDC_Functional_Header = ++ { ++ .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface}, ++ .Subtype = CDC_DSUBTYPE_CSInterface_Header, ++ ++ .CDCSpecification = VERSION_BCD(1,1,0), ++ }, ++ ++ .CDC_Functional_ACM = ++ { ++ .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface}, ++ .Subtype = CDC_DSUBTYPE_CSInterface_ACM, ++ ++ .Capabilities = 0x06, ++ }, ++ ++ .CDC_Functional_Union = ++ { ++ .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface}, ++ .Subtype = CDC_DSUBTYPE_CSInterface_Union, ++ ++ .MasterInterfaceNumber = INTERFACE_ID_CDC_CCI, ++ .SlaveInterfaceNumber = INTERFACE_ID_CDC_DCI, ++ }, ++ ++ .CDC_NotificationEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = CDC_NOTIFICATION_EPADDR, ++ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = CDC_NOTIFICATION_EPSIZE, ++ .PollingIntervalMS = 0xFF ++ }, ++ ++ .CDC_DCI_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_CDC_DCI, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 2, ++ ++ .Class = CDC_CSCP_CDCDataClass, ++ .SubClass = CDC_CSCP_NoDataSubclass, ++ .Protocol = CDC_CSCP_NoDataProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .CDC_DataOutEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = CDC_RX_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = CDC_TXRX_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++ ++ .CDC_DataInEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = CDC_TX_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = CDC_TXRX_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++ ++ .MS_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_MassStorage, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 2, ++ ++ .Class = MS_CSCP_MassStorageClass, ++ .SubClass = MS_CSCP_SCSITransparentSubclass, ++ .Protocol = MS_CSCP_BulkOnlyTransportProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .MS_DataInEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = MASS_STORAGE_IN_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = MASS_STORAGE_IO_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++ ++ .MS_DataOutEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = MASS_STORAGE_OUT_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = MASS_STORAGE_IO_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ } ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_String_t PROGMEM LanguageString = USB_STRING_DESCRIPTOR_ARRAY(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"LUFA CDC and Mass Storage 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 uint16_t wIndex, ++ const void** const DescriptorAddress) ++{ ++ const uint8_t DescriptorType = (wValue >> 8); ++ const uint8_t DescriptorNumber = (wValue & 0xFF); ++ ++ const void* Address = NULL; ++ uint16_t Size = NO_DESCRIPTOR; ++ ++ switch (DescriptorType) ++ { ++ case DTYPE_Device: ++ Address = &DeviceDescriptor; ++ Size = sizeof(USB_Descriptor_Device_t); ++ break; ++ case DTYPE_Configuration: ++ Address = &ConfigurationDescriptor; ++ Size = sizeof(USB_Descriptor_Configuration_t); ++ break; ++ case DTYPE_String: ++ switch (DescriptorNumber) ++ { ++ case STRING_ID_Language: ++ Address = &LanguageString; ++ Size = pgm_read_byte(&LanguageString.Header.Size); ++ break; ++ case STRING_ID_Manufacturer: ++ Address = &ManufacturerString; ++ Size = pgm_read_byte(&ManufacturerString.Header.Size); ++ break; ++ case STRING_ID_Product: ++ Address = &ProductString; ++ Size = pgm_read_byte(&ProductString.Header.Size); ++ break; ++ } ++ ++ break; ++ } ++ ++ *DescriptorAddress = Address; ++ return Size; ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/VirtualSerialMassStorage/Descriptors.h index 000000000,000000000..43c2b3165 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/VirtualSerialMassStorage/Descriptors.h @@@ -1,0 -1,0 +1,128 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 "Config/AppConfig.h" ++ ++ /* Macros: */ ++ /** Endpoint address of the CDC device-to-host notification IN endpoint. */ ++ #define CDC_NOTIFICATION_EPADDR (ENDPOINT_DIR_IN | 1) ++ ++ /** Endpoint address of the CDC device-to-host data IN endpoint. */ ++ #define CDC_TX_EPADDR (ENDPOINT_DIR_IN | 2) ++ ++ /** Endpoint address of the CDC host-to-device data OUT endpoint. */ ++ #define CDC_RX_EPADDR (ENDPOINT_DIR_OUT | 3) ++ ++ /** 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 address of the Mass Storage device-to-host data IN endpoint. */ ++ #define MASS_STORAGE_IN_EPADDR (ENDPOINT_DIR_IN | 4) ++ ++ /** Endpoint address of the Mass Storage host-to-device data OUT endpoint. */ ++ #define MASS_STORAGE_OUT_EPADDR (ENDPOINT_DIR_OUT | 5) ++ ++ /** Size in bytes of the Mass Storage data endpoints. */ ++ #define MASS_STORAGE_IO_EPSIZE 64 ++ ++ /* 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; ++ ++ // CDC Control Interface ++ USB_Descriptor_Interface_Association_t CDC_IAD; ++ USB_Descriptor_Interface_t CDC_CCI_Interface; ++ USB_CDC_Descriptor_FunctionalHeader_t CDC_Functional_Header; ++ USB_CDC_Descriptor_FunctionalACM_t CDC_Functional_ACM; ++ USB_CDC_Descriptor_FunctionalUnion_t CDC_Functional_Union; ++ USB_Descriptor_Endpoint_t CDC_NotificationEndpoint; ++ ++ // CDC Data Interface ++ USB_Descriptor_Interface_t CDC_DCI_Interface; ++ USB_Descriptor_Endpoint_t CDC_DataOutEndpoint; ++ USB_Descriptor_Endpoint_t CDC_DataInEndpoint; ++ ++ // Mass Storage Interface ++ USB_Descriptor_Interface_t MS_Interface; ++ USB_Descriptor_Endpoint_t MS_DataInEndpoint; ++ USB_Descriptor_Endpoint_t MS_DataOutEndpoint; ++ } USB_Descriptor_Configuration_t; ++ ++ /** Enum for the device interface descriptor IDs within the device. Each interface descriptor ++ * should have a unique ID index associated with it, which can be used to refer to the ++ * interface from other descriptors. ++ */ ++ enum InterfaceDescriptors_t ++ { ++ INTERFACE_ID_CDC_CCI = 0, /**< CDC CCI interface descriptor ID */ ++ INTERFACE_ID_CDC_DCI = 1, /**< CDC DCI interface descriptor ID */ ++ INTERFACE_ID_MassStorage = 2, /**< Mass storage interface descriptor ID */ ++ }; ++ ++ /** Enum for the device string descriptor IDs within the device. Each string descriptor should ++ * have a unique ID index associated with it, which can be used to refer to the string from ++ * other descriptors. ++ */ ++ enum StringDescriptors_t ++ { ++ STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */ ++ STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */ ++ STRING_ID_Product = 2, /**< Product string ID */ ++ }; ++ ++ /* Function Prototypes: */ ++ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ++ const uint16_t wIndex, ++ const void** const DescriptorAddress) ++ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/VirtualSerialMassStorage/LUFA VirtualSerialMassStorage.inf index 000000000,000000000..e5d8da5e3 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/VirtualSerialMassStorage/LUFA VirtualSerialMassStorage.inf @@@ -1,0 -1,0 +1,66 @@@ ++;************************************************************ ++; Windows USB CDC ACM Setup File ++; Copyright (c) 2000 Microsoft Corporation ++;************************************************************ ++ ++[DefaultInstall] ++CopyINF="LUFA VirtualSerialMassStorage.inf" ++ ++[Version] ++Signature="$Windows NT$" ++Class=Ports ++ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} ++Provider=%MFGNAME% ++DriverVer=7/1/2012,10.0.0.0 ++ ++[Manufacturer] ++%MFGNAME%=DeviceList, NTx86, NTamd64, NTia64 ++ ++[SourceDisksNames] ++ ++[SourceDisksFiles] ++ ++[DestinationDirs] ++DefaultDestDir=12 ++ ++[DriverInstall] ++Include=mdmcpq.inf ++CopyFiles=FakeModemCopyFileSection ++AddReg=DriverInstall.AddReg ++ ++[DriverInstall.Services] ++Include=mdmcpq.inf ++AddService=usbser, 0x00000002, LowerFilter_Service_Inst ++ ++[DriverInstall.AddReg] ++HKR,,EnumPropPages32,,"msports.dll,SerialPortPropPageProvider" ++ ++;------------------------------------------------------------------------------ ++; 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. ++;------------------------------------------------------------------------------ ++[DeviceList] ++%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_2068&MI_00 ++ ++[DeviceList.NTx86] ++%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_2068&MI_00 ++ ++[DeviceList.NTamd64] ++%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_2068&MI_00 ++ ++[DeviceList.NTia64] ++%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_2068&MI_00 ++ ++;------------------------------------------------------------------------------ ++; String Definitions ++;------------------------------------------------------------------------------ ++;Modify these strings to customize your device ++;------------------------------------------------------------------------------ ++[Strings] ++MFGNAME="http://www.lufa-lib.org" ++DESCRIPTION="LUFA CDC-ACM Virtual Serial Port" diff --cc lib/lufa/Demos/Device/ClassDriver/VirtualSerialMassStorage/Lib/DataflashManager.c index 000000000,000000000..c0fd16ccc new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/VirtualSerialMassStorage/Lib/DataflashManager.c @@@ -1,0 -1,0 +1,534 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * Functions to manage the physical Dataflash media, including reading and writing of ++ * blocks of data. These functions are called by the SCSI layer when data must be stored ++ * or retrieved to/from the physical storage media. If a different media is used (such ++ * as a SD card or EEPROM), functions similar to these will need to be generated. ++ */ ++ ++#define INCLUDE_FROM_DATAFLASHMANAGER_C ++#include "DataflashManager.h" ++ ++/** Writes blocks (OS blocks, not Dataflash pages) to the storage medium, the board Dataflash IC(s), from ++ * the pre-selected data OUT endpoint. This routine reads in OS sized blocks from the endpoint and writes ++ * them to the Dataflash in Dataflash page sized blocks. ++ * ++ * \param[in] MSInterfaceInfo Pointer to a structure containing a Mass Storage Class configuration and state ++ * \param[in] BlockAddress Data block starting address for the write sequence ++ * \param[in] TotalBlocks Number of blocks of data to write ++ */ ++void DataflashManager_WriteBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo, ++ const uint32_t BlockAddress, ++ uint16_t TotalBlocks) ++{ ++ uint16_t CurrDFPage = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE); ++ uint16_t CurrDFPageByte = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE); ++ uint8_t CurrDFPageByteDiv16 = (CurrDFPageByte >> 4); ++ bool UsingSecondBuffer = false; ++ ++ /* Select the correct starting Dataflash IC for the block requested */ ++ Dataflash_SelectChipFromPage(CurrDFPage); ++ ++#if (DATAFLASH_PAGE_SIZE > VIRTUAL_MEMORY_BLOCK_SIZE) ++ /* Copy selected dataflash's current page contents to the Dataflash buffer */ ++ Dataflash_SendByte(DF_CMD_MAINMEMTOBUFF1); ++ Dataflash_SendAddressBytes(CurrDFPage, 0); ++ Dataflash_WaitWhileBusy(); ++#endif ++ ++ /* Send the Dataflash buffer write command */ ++ Dataflash_SendByte(DF_CMD_BUFF1WRITE); ++ Dataflash_SendAddressBytes(0, CurrDFPageByte); ++ ++ /* Wait until endpoint is ready before continuing */ ++ if (Endpoint_WaitUntilReady()) ++ return; ++ ++ while (TotalBlocks) ++ { ++ uint8_t BytesInBlockDiv16 = 0; ++ ++ /* Write an endpoint packet sized data block to the Dataflash */ ++ while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4)) ++ { ++ /* Check if the endpoint is currently empty */ ++ if (!(Endpoint_IsReadWriteAllowed())) ++ { ++ /* Clear the current endpoint bank */ ++ Endpoint_ClearOUT(); ++ ++ /* Wait until the host has sent another packet */ ++ if (Endpoint_WaitUntilReady()) ++ return; ++ } ++ ++ /* Check if end of Dataflash page reached */ ++ if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4)) ++ { ++ /* Write the Dataflash buffer contents back to the Dataflash page */ ++ Dataflash_WaitWhileBusy(); ++ Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_BUFF2TOMAINMEMWITHERASE : DF_CMD_BUFF1TOMAINMEMWITHERASE); ++ Dataflash_SendAddressBytes(CurrDFPage, 0); ++ ++ /* Reset the Dataflash buffer counter, increment the page counter */ ++ CurrDFPageByteDiv16 = 0; ++ CurrDFPage++; ++ ++ /* Once all the Dataflash ICs have had their first buffers filled, switch buffers to maintain throughput */ ++ if (Dataflash_GetSelectedChip() == DATAFLASH_CHIP_MASK(DATAFLASH_TOTALCHIPS)) ++ UsingSecondBuffer = !(UsingSecondBuffer); ++ ++ /* Select the next Dataflash chip based on the new Dataflash page index */ ++ Dataflash_SelectChipFromPage(CurrDFPage); ++ ++#if (DATAFLASH_PAGE_SIZE > VIRTUAL_MEMORY_BLOCK_SIZE) ++ /* If less than one Dataflash page remaining, copy over the existing page to preserve trailing data */ ++ if ((TotalBlocks * (VIRTUAL_MEMORY_BLOCK_SIZE >> 4)) < (DATAFLASH_PAGE_SIZE >> 4)) ++ { ++ /* Copy selected dataflash's current page contents to the Dataflash buffer */ ++ Dataflash_WaitWhileBusy(); ++ Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_MAINMEMTOBUFF2 : DF_CMD_MAINMEMTOBUFF1); ++ Dataflash_SendAddressBytes(CurrDFPage, 0); ++ Dataflash_WaitWhileBusy(); ++ } ++#endif ++ ++ /* Send the Dataflash buffer write command */ ++ Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_BUFF2WRITE : DF_CMD_BUFF1WRITE); ++ Dataflash_SendAddressBytes(0, 0); ++ } ++ ++ /* Write one 16-byte chunk of data to the Dataflash */ ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ ++ /* Increment the Dataflash page 16 byte block counter */ ++ CurrDFPageByteDiv16++; ++ ++ /* Increment the block 16 byte block counter */ ++ BytesInBlockDiv16++; ++ ++ /* Check if the current command is being aborted by the host */ ++ if (MSInterfaceInfo->State.IsMassStoreReset) ++ return; ++ } ++ ++ /* Decrement the blocks remaining counter */ ++ TotalBlocks--; ++ } ++ ++ /* Write the Dataflash buffer contents back to the Dataflash page */ ++ Dataflash_WaitWhileBusy(); ++ Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_BUFF2TOMAINMEMWITHERASE : DF_CMD_BUFF1TOMAINMEMWITHERASE); ++ Dataflash_SendAddressBytes(CurrDFPage, 0x00); ++ Dataflash_WaitWhileBusy(); ++ ++ /* If the endpoint is empty, clear it ready for the next packet from the host */ ++ if (!(Endpoint_IsReadWriteAllowed())) ++ Endpoint_ClearOUT(); ++ ++ /* Deselect all Dataflash chips */ ++ Dataflash_DeselectChip(); ++} ++ ++/** Reads blocks (OS blocks, not Dataflash pages) from the storage medium, the board Dataflash IC(s), into ++ * the pre-selected data IN endpoint. This routine reads in Dataflash page sized blocks from the Dataflash ++ * and writes them in OS sized blocks to the endpoint. ++ * ++ * \param[in] MSInterfaceInfo Pointer to a structure containing a Mass Storage Class configuration and state ++ * \param[in] BlockAddress Data block starting address for the read sequence ++ * \param[in] TotalBlocks Number of blocks of data to read ++ */ ++void DataflashManager_ReadBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo, ++ const uint32_t BlockAddress, ++ uint16_t TotalBlocks) ++{ ++ uint16_t CurrDFPage = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE); ++ uint16_t CurrDFPageByte = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE); ++ uint8_t CurrDFPageByteDiv16 = (CurrDFPageByte >> 4); ++ ++ /* Select the correct starting Dataflash IC for the block requested */ ++ Dataflash_SelectChipFromPage(CurrDFPage); ++ ++ /* Send the Dataflash main memory page read command */ ++ Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD); ++ Dataflash_SendAddressBytes(CurrDFPage, CurrDFPageByte); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ ++ /* Wait until endpoint is ready before continuing */ ++ if (Endpoint_WaitUntilReady()) ++ return; ++ ++ while (TotalBlocks) ++ { ++ uint8_t BytesInBlockDiv16 = 0; ++ ++ /* Read an endpoint packet sized data block from the Dataflash */ ++ while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4)) ++ { ++ /* Check if the endpoint is currently full */ ++ if (!(Endpoint_IsReadWriteAllowed())) ++ { ++ /* Clear the endpoint bank to send its contents to the host */ ++ Endpoint_ClearIN(); ++ ++ /* Wait until the endpoint is ready for more data */ ++ if (Endpoint_WaitUntilReady()) ++ return; ++ } ++ ++ /* Check if end of Dataflash page reached */ ++ if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4)) ++ { ++ /* Reset the Dataflash buffer counter, increment the page counter */ ++ CurrDFPageByteDiv16 = 0; ++ CurrDFPage++; ++ ++ /* Select the next Dataflash chip based on the new Dataflash page index */ ++ Dataflash_SelectChipFromPage(CurrDFPage); ++ ++ /* Send the Dataflash main memory page read command */ ++ Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD); ++ Dataflash_SendAddressBytes(CurrDFPage, 0); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ } ++ ++ /* Read one 16-byte chunk of data from the Dataflash */ ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ ++ /* Increment the Dataflash page 16 byte block counter */ ++ CurrDFPageByteDiv16++; ++ ++ /* Increment the block 16 byte block counter */ ++ BytesInBlockDiv16++; ++ ++ /* Check if the current command is being aborted by the host */ ++ if (MSInterfaceInfo->State.IsMassStoreReset) ++ return; ++ } ++ ++ /* Decrement the blocks remaining counter */ ++ TotalBlocks--; ++ } ++ ++ /* If the endpoint is full, send its contents to the host */ ++ if (!(Endpoint_IsReadWriteAllowed())) ++ Endpoint_ClearIN(); ++ ++ /* Deselect all Dataflash chips */ ++ Dataflash_DeselectChip(); ++} ++ ++/** Writes blocks (OS blocks, not Dataflash pages) to the storage medium, the board Dataflash IC(s), from ++ * the given RAM buffer. This routine reads in OS sized blocks from the buffer and writes them to the ++ * Dataflash in Dataflash page sized blocks. This can be linked to FAT libraries to write files to the ++ * Dataflash. ++ * ++ * \param[in] BlockAddress Data block starting address for the write sequence ++ * \param[in] TotalBlocks Number of blocks of data to write ++ * \param[in] BufferPtr Pointer to the data source RAM buffer ++ */ ++void DataflashManager_WriteBlocks_RAM(const uint32_t BlockAddress, ++ uint16_t TotalBlocks, ++ uint8_t* BufferPtr) ++{ ++ uint16_t CurrDFPage = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE); ++ uint16_t CurrDFPageByte = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE); ++ uint8_t CurrDFPageByteDiv16 = (CurrDFPageByte >> 4); ++ bool UsingSecondBuffer = false; ++ ++ /* Select the correct starting Dataflash IC for the block requested */ ++ Dataflash_SelectChipFromPage(CurrDFPage); ++ ++#if (DATAFLASH_PAGE_SIZE > VIRTUAL_MEMORY_BLOCK_SIZE) ++ /* Copy selected dataflash's current page contents to the Dataflash buffer */ ++ Dataflash_SendByte(DF_CMD_MAINMEMTOBUFF1); ++ Dataflash_SendAddressBytes(CurrDFPage, 0); ++ Dataflash_WaitWhileBusy(); ++#endif ++ ++ /* Send the Dataflash buffer write command */ ++ Dataflash_SendByte(DF_CMD_BUFF1WRITE); ++ Dataflash_SendAddressBytes(0, CurrDFPageByte); ++ ++ while (TotalBlocks) ++ { ++ uint8_t BytesInBlockDiv16 = 0; ++ ++ /* Write an endpoint packet sized data block to the Dataflash */ ++ while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4)) ++ { ++ /* Check if end of Dataflash page reached */ ++ if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4)) ++ { ++ /* Write the Dataflash buffer contents back to the Dataflash page */ ++ Dataflash_WaitWhileBusy(); ++ Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_BUFF2TOMAINMEMWITHERASE : DF_CMD_BUFF1TOMAINMEMWITHERASE); ++ Dataflash_SendAddressBytes(CurrDFPage, 0); ++ ++ /* Reset the Dataflash buffer counter, increment the page counter */ ++ CurrDFPageByteDiv16 = 0; ++ CurrDFPage++; ++ ++ /* Once all the Dataflash ICs have had their first buffers filled, switch buffers to maintain throughput */ ++ if (Dataflash_GetSelectedChip() == DATAFLASH_CHIP_MASK(DATAFLASH_TOTALCHIPS)) ++ UsingSecondBuffer = !(UsingSecondBuffer); ++ ++ /* Select the next Dataflash chip based on the new Dataflash page index */ ++ Dataflash_SelectChipFromPage(CurrDFPage); ++ ++#if (DATAFLASH_PAGE_SIZE > VIRTUAL_MEMORY_BLOCK_SIZE) ++ /* If less than one Dataflash page remaining, copy over the existing page to preserve trailing data */ ++ if ((TotalBlocks * (VIRTUAL_MEMORY_BLOCK_SIZE >> 4)) < (DATAFLASH_PAGE_SIZE >> 4)) ++ { ++ /* Copy selected dataflash's current page contents to the Dataflash buffer */ ++ Dataflash_WaitWhileBusy(); ++ Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_MAINMEMTOBUFF2 : DF_CMD_MAINMEMTOBUFF1); ++ Dataflash_SendAddressBytes(CurrDFPage, 0); ++ Dataflash_WaitWhileBusy(); ++ } ++#endif ++ ++ /* Send the Dataflash buffer write command */ ++ Dataflash_ToggleSelectedChipCS(); ++ Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_BUFF2WRITE : DF_CMD_BUFF1WRITE); ++ Dataflash_SendAddressBytes(0, 0); ++ } ++ ++ /* Write one 16-byte chunk of data to the Dataflash */ ++ for (uint8_t ByteNum = 0; ByteNum < 16; ByteNum++) ++ Dataflash_SendByte(*(BufferPtr++)); ++ ++ /* Increment the Dataflash page 16 byte block counter */ ++ CurrDFPageByteDiv16++; ++ ++ /* Increment the block 16 byte block counter */ ++ BytesInBlockDiv16++; ++ } ++ ++ /* Decrement the blocks remaining counter */ ++ TotalBlocks--; ++ } ++ ++ /* Write the Dataflash buffer contents back to the Dataflash page */ ++ Dataflash_WaitWhileBusy(); ++ Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_BUFF2TOMAINMEMWITHERASE : DF_CMD_BUFF1TOMAINMEMWITHERASE); ++ Dataflash_SendAddressBytes(CurrDFPage, 0x00); ++ Dataflash_WaitWhileBusy(); ++ ++ /* Deselect all Dataflash chips */ ++ Dataflash_DeselectChip(); ++} ++ ++/** Reads blocks (OS blocks, not Dataflash pages) from the storage medium, the board Dataflash IC(s), into ++ * the preallocated RAM buffer. This routine reads in Dataflash page sized blocks from the Dataflash ++ * and writes them in OS sized blocks to the given buffer. This can be linked to FAT libraries to read ++ * the files stored on the Dataflash. ++ * ++ * \param[in] BlockAddress Data block starting address for the read sequence ++ * \param[in] TotalBlocks Number of blocks of data to read ++ * \param[out] BufferPtr Pointer to the data destination RAM buffer ++ */ ++void DataflashManager_ReadBlocks_RAM(const uint32_t BlockAddress, ++ uint16_t TotalBlocks, ++ uint8_t* BufferPtr) ++{ ++ uint16_t CurrDFPage = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE); ++ uint16_t CurrDFPageByte = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE); ++ uint8_t CurrDFPageByteDiv16 = (CurrDFPageByte >> 4); ++ ++ /* Select the correct starting Dataflash IC for the block requested */ ++ Dataflash_SelectChipFromPage(CurrDFPage); ++ ++ /* Send the Dataflash main memory page read command */ ++ Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD); ++ Dataflash_SendAddressBytes(CurrDFPage, CurrDFPageByte); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ ++ while (TotalBlocks) ++ { ++ uint8_t BytesInBlockDiv16 = 0; ++ ++ /* Read an endpoint packet sized data block from the Dataflash */ ++ while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4)) ++ { ++ /* Check if end of Dataflash page reached */ ++ if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4)) ++ { ++ /* Reset the Dataflash buffer counter, increment the page counter */ ++ CurrDFPageByteDiv16 = 0; ++ CurrDFPage++; ++ ++ /* Select the next Dataflash chip based on the new Dataflash page index */ ++ Dataflash_SelectChipFromPage(CurrDFPage); ++ ++ /* Send the Dataflash main memory page read command */ ++ Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD); ++ Dataflash_SendAddressBytes(CurrDFPage, 0); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ } ++ ++ /* Read one 16-byte chunk of data from the Dataflash */ ++ for (uint8_t ByteNum = 0; ByteNum < 16; ByteNum++) ++ *(BufferPtr++) = Dataflash_ReceiveByte(); ++ ++ /* Increment the Dataflash page 16 byte block counter */ ++ CurrDFPageByteDiv16++; ++ ++ /* Increment the block 16 byte block counter */ ++ BytesInBlockDiv16++; ++ } ++ ++ /* Decrement the blocks remaining counter */ ++ TotalBlocks--; ++ } ++ ++ /* Deselect all Dataflash chips */ ++ Dataflash_DeselectChip(); ++} ++ ++/** Disables the Dataflash memory write protection bits on the board Dataflash ICs, if enabled. */ ++void DataflashManager_ResetDataflashProtections(void) ++{ ++ /* Select first Dataflash chip, send the read status register command */ ++ Dataflash_SelectChip(DATAFLASH_CHIP1); ++ Dataflash_SendByte(DF_CMD_GETSTATUS); ++ ++ /* Check if sector protection is enabled */ ++ if (Dataflash_ReceiveByte() & DF_STATUS_SECTORPROTECTION_ON) ++ { ++ Dataflash_ToggleSelectedChipCS(); ++ ++ /* Send the commands to disable sector protection */ ++ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[0]); ++ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[1]); ++ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[2]); ++ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[3]); ++ } ++ ++ /* Select second Dataflash chip (if present on selected board), send read status register command */ ++ #if (DATAFLASH_TOTALCHIPS == 2) ++ Dataflash_SelectChip(DATAFLASH_CHIP2); ++ Dataflash_SendByte(DF_CMD_GETSTATUS); ++ ++ /* Check if sector protection is enabled */ ++ if (Dataflash_ReceiveByte() & DF_STATUS_SECTORPROTECTION_ON) ++ { ++ Dataflash_ToggleSelectedChipCS(); ++ ++ /* Send the commands to disable sector protection */ ++ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[0]); ++ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[1]); ++ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[2]); ++ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[3]); ++ } ++ #endif ++ ++ /* Deselect current Dataflash chip */ ++ Dataflash_DeselectChip(); ++} ++ ++/** Performs a simple test on the attached Dataflash IC(s) to ensure that they are working. ++ * ++ * \return Boolean \c true if all media chips are working, \c false otherwise ++ */ ++bool DataflashManager_CheckDataflashOperation(void) ++{ ++ uint8_t ReturnByte; ++ ++ /* Test first Dataflash IC is present and responding to commands */ ++ Dataflash_SelectChip(DATAFLASH_CHIP1); ++ Dataflash_SendByte(DF_CMD_READMANUFACTURERDEVICEINFO); ++ ReturnByte = Dataflash_ReceiveByte(); ++ Dataflash_DeselectChip(); ++ ++ /* If returned data is invalid, fail the command */ ++ if (ReturnByte != DF_MANUFACTURER_ATMEL) ++ return false; ++ ++ #if (DATAFLASH_TOTALCHIPS == 2) ++ /* Test second Dataflash IC is present and responding to commands */ ++ Dataflash_SelectChip(DATAFLASH_CHIP2); ++ Dataflash_SendByte(DF_CMD_READMANUFACTURERDEVICEINFO); ++ ReturnByte = Dataflash_ReceiveByte(); ++ Dataflash_DeselectChip(); ++ ++ /* If returned data is invalid, fail the command */ ++ if (ReturnByte != DF_MANUFACTURER_ATMEL) ++ return false; ++ #endif ++ ++ return true; ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/VirtualSerialMassStorage/Lib/DataflashManager.h index 000000000,000000000..e44e61835 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/VirtualSerialMassStorage/Lib/DataflashManager.h @@@ -1,0 -1,0 +1,89 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 DataflashManager.c. ++ */ ++ ++#ifndef _DATAFLASH_MANAGER_H_ ++#define _DATAFLASH_MANAGER_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ ++ #include "../VirtualSerialMassStorage.h" ++ #include "../Descriptors.h" ++ #include "Config/AppConfig.h" ++ ++ #include <LUFA/Common/Common.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Drivers/Board/Dataflash.h> ++ ++ /* Preprocessor Checks: */ ++ #if (DATAFLASH_PAGE_SIZE % 16) ++ #error Dataflash page size must be a multiple of 16 bytes. ++ #endif ++ ++ /* Defines: */ ++ /** Total number of bytes of the storage medium, comprised of one or more Dataflash ICs. */ ++ #define VIRTUAL_MEMORY_BYTES ((uint32_t)DATAFLASH_PAGES * DATAFLASH_PAGE_SIZE * DATAFLASH_TOTALCHIPS) ++ ++ /** Block size of the device. This is kept at 512 to remain compatible with the OS despite the underlying ++ * storage media (Dataflash) using a different native block size. Do not change this value. ++ */ ++ #define VIRTUAL_MEMORY_BLOCK_SIZE 512 ++ ++ /** Total number of blocks of the virtual memory for reporting to the host as the device's total capacity. Do not ++ * change this value; change VIRTUAL_MEMORY_BYTES instead to alter the media size. ++ */ ++ #define VIRTUAL_MEMORY_BLOCKS (VIRTUAL_MEMORY_BYTES / VIRTUAL_MEMORY_BLOCK_SIZE) ++ ++ /** Blocks in each LUN, calculated from the total capacity divided by the total number of Logical Units in the device. */ ++ #define LUN_MEDIA_BLOCKS (VIRTUAL_MEMORY_BLOCKS / TOTAL_LUNS) ++ ++ /* Function Prototypes: */ ++ void DataflashManager_WriteBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo, ++ const uint32_t BlockAddress, ++ uint16_t TotalBlocks); ++ void DataflashManager_ReadBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo, ++ const uint32_t BlockAddress, ++ uint16_t TotalBlocks); ++ void DataflashManager_WriteBlocks_RAM(const uint32_t BlockAddress, ++ uint16_t TotalBlocks, ++ uint8_t* BufferPtr) ATTR_NON_NULL_PTR_ARG(3); ++ void DataflashManager_ReadBlocks_RAM(const uint32_t BlockAddress, ++ uint16_t TotalBlocks, ++ uint8_t* BufferPtr) ATTR_NON_NULL_PTR_ARG(3); ++ void DataflashManager_ResetDataflashProtections(void); ++ bool DataflashManager_CheckDataflashOperation(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/VirtualSerialMassStorage/Lib/SCSI.c index 000000000,000000000..8780d1603 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/VirtualSerialMassStorage/Lib/SCSI.c @@@ -1,0 -1,0 +1,349 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * SCSI command processing routines, for SCSI commands issued by the host. Mass Storage ++ * devices use a thin "Bulk-Only Transport" protocol for issuing commands and status information, ++ * which wrap around standard SCSI device commands for controlling the actual storage medium. ++ */ ++ ++#define INCLUDE_FROM_SCSI_C ++#include "SCSI.h" ++ ++/** Structure to hold the SCSI response data to a SCSI INQUIRY command. This gives information about the device's ++ * features and capabilities. ++ */ ++static const SCSI_Inquiry_Response_t InquiryData = ++ { ++ .DeviceType = DEVICE_TYPE_BLOCK, ++ .PeripheralQualifier = 0, ++ ++ .Removable = true, ++ ++ .Version = 0, ++ ++ .ResponseDataFormat = 2, ++ .NormACA = false, ++ .TrmTsk = false, ++ .AERC = false, ++ ++ .AdditionalLength = 0x1F, ++ ++ .SoftReset = false, ++ .CmdQue = false, ++ .Linked = false, ++ .Sync = false, ++ .WideBus16Bit = false, ++ .WideBus32Bit = false, ++ .RelAddr = false, ++ ++ .VendorID = "LUFA", ++ .ProductID = "Dataflash Disk", ++ .RevisionID = {'0','.','0','0'}, ++ }; ++ ++/** Structure to hold the sense data for the last issued SCSI command, which is returned to the host after a SCSI REQUEST SENSE ++ * command is issued. This gives information on exactly why the last command failed to complete. ++ */ ++static SCSI_Request_Sense_Response_t SenseData = ++ { ++ .ResponseCode = 0x70, ++ .AdditionalLength = 0x0A, ++ }; ++ ++ ++/** Main routine to process the SCSI command located in the Command Block Wrapper read from the host. This dispatches ++ * to the appropriate SCSI command handling routine if the issued command is supported by the device, else it returns ++ * a command failure due to a ILLEGAL REQUEST. ++ * ++ * \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with ++ * ++ * \return Boolean \c true if the command completed successfully, \c false otherwise ++ */ ++bool SCSI_DecodeSCSICommand(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) ++{ ++ bool CommandSuccess = false; ++ ++ /* Run the appropriate SCSI command hander function based on the passed command */ ++ switch (MSInterfaceInfo->State.CommandBlock.SCSICommandData[0]) ++ { ++ case SCSI_CMD_INQUIRY: ++ CommandSuccess = SCSI_Command_Inquiry(MSInterfaceInfo); ++ break; ++ case SCSI_CMD_REQUEST_SENSE: ++ CommandSuccess = SCSI_Command_Request_Sense(MSInterfaceInfo); ++ break; ++ case SCSI_CMD_READ_CAPACITY_10: ++ CommandSuccess = SCSI_Command_Read_Capacity_10(MSInterfaceInfo); ++ break; ++ case SCSI_CMD_SEND_DIAGNOSTIC: ++ CommandSuccess = SCSI_Command_Send_Diagnostic(MSInterfaceInfo); ++ break; ++ case SCSI_CMD_WRITE_10: ++ CommandSuccess = SCSI_Command_ReadWrite_10(MSInterfaceInfo, DATA_WRITE); ++ break; ++ case SCSI_CMD_READ_10: ++ CommandSuccess = SCSI_Command_ReadWrite_10(MSInterfaceInfo, DATA_READ); ++ break; ++ case SCSI_CMD_MODE_SENSE_6: ++ CommandSuccess = SCSI_Command_ModeSense_6(MSInterfaceInfo); ++ break; ++ case SCSI_CMD_START_STOP_UNIT: ++ case SCSI_CMD_TEST_UNIT_READY: ++ case SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL: ++ case SCSI_CMD_VERIFY_10: ++ /* These commands should just succeed, no handling required */ ++ CommandSuccess = true; ++ MSInterfaceInfo->State.CommandBlock.DataTransferLength = 0; ++ break; ++ default: ++ /* Update the SENSE key to reflect the invalid command */ ++ SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST, ++ SCSI_ASENSE_INVALID_COMMAND, ++ SCSI_ASENSEQ_NO_QUALIFIER); ++ break; ++ } ++ ++ /* Check if command was successfully processed */ ++ if (CommandSuccess) ++ { ++ SCSI_SET_SENSE(SCSI_SENSE_KEY_GOOD, ++ SCSI_ASENSE_NO_ADDITIONAL_INFORMATION, ++ SCSI_ASENSEQ_NO_QUALIFIER); ++ ++ return true; ++ } ++ ++ return false; ++} ++ ++/** Command processing for an issued SCSI INQUIRY command. This command returns information about the device's features ++ * and capabilities to the host. ++ * ++ * \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with ++ * ++ * \return Boolean \c true if the command completed successfully, \c false otherwise. ++ */ ++static bool SCSI_Command_Inquiry(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) ++{ ++ uint16_t AllocationLength = SwapEndian_16(*(uint16_t*)&MSInterfaceInfo->State.CommandBlock.SCSICommandData[3]); ++ uint16_t BytesTransferred = MIN(AllocationLength, sizeof(InquiryData)); ++ ++ /* Only the standard INQUIRY data is supported, check if any optional INQUIRY bits set */ ++ if ((MSInterfaceInfo->State.CommandBlock.SCSICommandData[1] & ((1 << 0) | (1 << 1))) || ++ MSInterfaceInfo->State.CommandBlock.SCSICommandData[2]) ++ { ++ /* Optional but unsupported bits set - update the SENSE key and fail the request */ ++ SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST, ++ SCSI_ASENSE_INVALID_FIELD_IN_CDB, ++ SCSI_ASENSEQ_NO_QUALIFIER); ++ ++ return false; ++ } ++ ++ Endpoint_Write_Stream_LE(&InquiryData, BytesTransferred, NULL); ++ ++ /* Pad out remaining bytes with 0x00 */ ++ Endpoint_Null_Stream((AllocationLength - BytesTransferred), NULL); ++ ++ /* Finalize the stream transfer to send the last packet */ ++ Endpoint_ClearIN(); ++ ++ /* Succeed the command and update the bytes transferred counter */ ++ MSInterfaceInfo->State.CommandBlock.DataTransferLength -= BytesTransferred; ++ ++ return true; ++} ++ ++/** Command processing for an issued SCSI REQUEST SENSE command. This command returns information about the last issued command, ++ * including the error code and additional error information so that the host can determine why a command failed to complete. ++ * ++ * \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with ++ * ++ * \return Boolean \c true if the command completed successfully, \c false otherwise. ++ */ ++static bool SCSI_Command_Request_Sense(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) ++{ ++ uint8_t AllocationLength = MSInterfaceInfo->State.CommandBlock.SCSICommandData[4]; ++ uint8_t BytesTransferred = MIN(AllocationLength, sizeof(SenseData)); ++ ++ Endpoint_Write_Stream_LE(&SenseData, BytesTransferred, NULL); ++ Endpoint_Null_Stream((AllocationLength - BytesTransferred), NULL); ++ Endpoint_ClearIN(); ++ ++ /* Succeed the command and update the bytes transferred counter */ ++ MSInterfaceInfo->State.CommandBlock.DataTransferLength -= BytesTransferred; ++ ++ return true; ++} ++ ++/** Command processing for an issued SCSI READ CAPACITY (10) command. This command returns information about the device's capacity ++ * on the selected Logical Unit (drive), as a number of OS-sized blocks. ++ * ++ * \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with ++ * ++ * \return Boolean \c true if the command completed successfully, \c false otherwise. ++ */ ++static bool SCSI_Command_Read_Capacity_10(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) ++{ ++ uint32_t LastBlockAddressInLUN = (LUN_MEDIA_BLOCKS - 1); ++ uint32_t MediaBlockSize = VIRTUAL_MEMORY_BLOCK_SIZE; ++ ++ Endpoint_Write_Stream_BE(&LastBlockAddressInLUN, sizeof(LastBlockAddressInLUN), NULL); ++ Endpoint_Write_Stream_BE(&MediaBlockSize, sizeof(MediaBlockSize), NULL); ++ Endpoint_ClearIN(); ++ ++ /* Succeed the command and update the bytes transferred counter */ ++ MSInterfaceInfo->State.CommandBlock.DataTransferLength -= 8; ++ ++ return true; ++} ++ ++/** Command processing for an issued SCSI SEND DIAGNOSTIC command. This command performs a quick check of the Dataflash ICs on the ++ * board, and indicates if they are present and functioning correctly. Only the Self-Test portion of the diagnostic command is ++ * supported. ++ * ++ * \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with ++ * ++ * \return Boolean \c true if the command completed successfully, \c false otherwise. ++ */ ++static bool SCSI_Command_Send_Diagnostic(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) ++{ ++ /* Check to see if the SELF TEST bit is not set */ ++ if (!(MSInterfaceInfo->State.CommandBlock.SCSICommandData[1] & (1 << 2))) ++ { ++ /* Only self-test supported - update SENSE key and fail the command */ ++ SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST, ++ SCSI_ASENSE_INVALID_FIELD_IN_CDB, ++ SCSI_ASENSEQ_NO_QUALIFIER); ++ ++ return false; ++ } ++ ++ /* Check to see if all attached Dataflash ICs are functional */ ++ if (!(DataflashManager_CheckDataflashOperation())) ++ { ++ /* Update SENSE key with a hardware error condition and return command fail */ ++ SCSI_SET_SENSE(SCSI_SENSE_KEY_HARDWARE_ERROR, ++ SCSI_ASENSE_NO_ADDITIONAL_INFORMATION, ++ SCSI_ASENSEQ_NO_QUALIFIER); ++ ++ return false; ++ } ++ ++ /* Succeed the command and update the bytes transferred counter */ ++ MSInterfaceInfo->State.CommandBlock.DataTransferLength = 0; ++ ++ return true; ++} ++ ++/** Command processing for an issued SCSI READ (10) or WRITE (10) command. This command reads in the block start address ++ * and total number of blocks to process, then calls the appropriate low-level Dataflash routine to handle the actual ++ * reading and writing of the data. ++ * ++ * \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with ++ * \param[in] IsDataRead Indicates if the command is a READ (10) command or WRITE (10) command (DATA_READ or DATA_WRITE) ++ * ++ * \return Boolean \c true if the command completed successfully, \c false otherwise. ++ */ ++static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo, ++ const bool IsDataRead) ++{ ++ uint32_t BlockAddress; ++ uint16_t TotalBlocks; ++ ++ /* Check if the disk is write protected or not */ ++ if ((IsDataRead == DATA_WRITE) && DISK_READ_ONLY) ++ { ++ /* Block address is invalid, update SENSE key and return command fail */ ++ SCSI_SET_SENSE(SCSI_SENSE_KEY_DATA_PROTECT, ++ SCSI_ASENSE_WRITE_PROTECTED, ++ SCSI_ASENSEQ_NO_QUALIFIER); ++ ++ return false; ++ } ++ ++ /* Load in the 32-bit block address (SCSI uses big-endian, so have to reverse the byte order) */ ++ BlockAddress = SwapEndian_32(*(uint32_t*)&MSInterfaceInfo->State.CommandBlock.SCSICommandData[2]); ++ ++ /* Load in the 16-bit total blocks (SCSI uses big-endian, so have to reverse the byte order) */ ++ TotalBlocks = SwapEndian_16(*(uint16_t*)&MSInterfaceInfo->State.CommandBlock.SCSICommandData[7]); ++ ++ /* Check if the block address is outside the maximum allowable value for the LUN */ ++ if (BlockAddress >= LUN_MEDIA_BLOCKS) ++ { ++ /* Block address is invalid, update SENSE key and return command fail */ ++ SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST, ++ SCSI_ASENSE_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE, ++ SCSI_ASENSEQ_NO_QUALIFIER); ++ ++ return false; ++ } ++ ++ #if (TOTAL_LUNS > 1) ++ /* Adjust the given block address to the real media address based on the selected LUN */ ++ BlockAddress += ((uint32_t)MSInterfaceInfo->State.CommandBlock.LUN * LUN_MEDIA_BLOCKS); ++ #endif ++ ++ /* Determine if the packet is a READ (10) or WRITE (10) command, call appropriate function */ ++ if (IsDataRead == DATA_READ) ++ DataflashManager_ReadBlocks(MSInterfaceInfo, BlockAddress, TotalBlocks); ++ else ++ DataflashManager_WriteBlocks(MSInterfaceInfo, BlockAddress, TotalBlocks); ++ ++ /* Update the bytes transferred counter and succeed the command */ ++ MSInterfaceInfo->State.CommandBlock.DataTransferLength -= ((uint32_t)TotalBlocks * VIRTUAL_MEMORY_BLOCK_SIZE); ++ ++ return true; ++} ++ ++/** Command processing for an issued SCSI MODE SENSE (6) command. This command returns various informational pages about ++ * the SCSI device, as well as the device's Write Protect status. ++ * ++ * \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with ++ * ++ * \return Boolean \c true if the command completed successfully, \c false otherwise. ++ */ ++static bool SCSI_Command_ModeSense_6(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) ++{ ++ /* Send an empty header response with the Write Protect flag status */ ++ Endpoint_Write_8(0x00); ++ Endpoint_Write_8(0x00); ++ Endpoint_Write_8(DISK_READ_ONLY ? 0x80 : 0x00); ++ Endpoint_Write_8(0x00); ++ Endpoint_ClearIN(); ++ ++ /* Update the bytes transferred counter and succeed the command */ ++ MSInterfaceInfo->State.CommandBlock.DataTransferLength -= 4; ++ ++ return true; ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/VirtualSerialMassStorage/Lib/SCSI.h index 000000000,000000000..e16c2d46d new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/VirtualSerialMassStorage/Lib/SCSI.h @@@ -1,0 -1,0 +1,89 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 SCSI.c. ++ */ ++ ++#ifndef _SCSI_H_ ++#define _SCSI_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/pgmspace.h> ++ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include "../VirtualSerialMassStorage.h" ++ #include "../Descriptors.h" ++ #include "DataflashManager.h" ++ #include "Config/AppConfig.h" ++ ++ /* Macros: */ ++ /** Macro to set the current SCSI sense data to the given key, additional sense code and additional sense qualifier. This ++ * is for convenience, as it allows for all three sense values (returned upon request to the host to give information about ++ * the last command failure) in a quick and easy manner. ++ * ++ * \param[in] Key New SCSI sense key to set the sense code to ++ * \param[in] Acode New SCSI additional sense key to set the additional sense code to ++ * \param[in] Aqual New SCSI additional sense key qualifier to set the additional sense qualifier code to ++ */ ++ #define SCSI_SET_SENSE(Key, Acode, Aqual) do { SenseData.SenseKey = (Key); \ ++ SenseData.AdditionalSenseCode = (Acode); \ ++ SenseData.AdditionalSenseQualifier = (Aqual); } while (0) ++ ++ /** Macro for the \ref SCSI_Command_ReadWrite_10() function, to indicate that data is to be read from the storage medium. */ ++ #define DATA_READ true ++ ++ /** Macro for the \ref SCSI_Command_ReadWrite_10() function, to indicate that data is to be written to the storage medium. */ ++ #define DATA_WRITE false ++ ++ /** Value for the DeviceType entry in the SCSI_Inquiry_Response_t enum, indicating a Block Media device. */ ++ #define DEVICE_TYPE_BLOCK 0x00 ++ ++ /** Value for the DeviceType entry in the SCSI_Inquiry_Response_t enum, indicating a CD-ROM device. */ ++ #define DEVICE_TYPE_CDROM 0x05 ++ ++ /* Function Prototypes: */ ++ bool SCSI_DecodeSCSICommand(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo); ++ ++ #if defined(INCLUDE_FROM_SCSI_C) ++ static bool SCSI_Command_Inquiry(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo); ++ static bool SCSI_Command_Request_Sense(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo); ++ static bool SCSI_Command_Read_Capacity_10(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo); ++ static bool SCSI_Command_Send_Diagnostic(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo); ++ static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo, ++ const bool IsDataRead); ++ static bool SCSI_Command_ModeSense_6(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo); ++ #endif ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/VirtualSerialMassStorage/VirtualSerialMassStorage.c index 000000000,000000000..f298e39cb new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/VirtualSerialMassStorage/VirtualSerialMassStorage.c @@@ -1,0 -1,0 +1,257 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 VirtualSerialMassStorage demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "VirtualSerialMassStorage.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 = INTERFACE_ID_CDC_CCI, ++ .DataINEndpoint = ++ { ++ .Address = CDC_TX_EPADDR, ++ .Size = CDC_TXRX_EPSIZE, ++ .Banks = 1, ++ }, ++ .DataOUTEndpoint = ++ { ++ .Address = CDC_RX_EPADDR, ++ .Size = CDC_TXRX_EPSIZE, ++ .Banks = 1, ++ }, ++ .NotificationEndpoint = ++ { ++ .Address = CDC_NOTIFICATION_EPADDR, ++ .Size = CDC_NOTIFICATION_EPSIZE, ++ .Banks = 1, ++ }, ++ }, ++ }; ++ ++/** LUFA Mass Storage Class driver interface configuration and state information. This structure is ++ * passed to all Mass Storage Class driver functions, so that multiple instances of the same class ++ * within a device can be differentiated from one another. ++ */ ++USB_ClassInfo_MS_Device_t Disk_MS_Interface = ++ { ++ .Config = ++ { ++ .InterfaceNumber = INTERFACE_ID_MassStorage, ++ .DataINEndpoint = ++ { ++ .Address = MASS_STORAGE_IN_EPADDR, ++ .Size = MASS_STORAGE_IO_EPSIZE, ++ .Banks = 1, ++ }, ++ .DataOUTEndpoint = ++ { ++ .Address = MASS_STORAGE_OUT_EPADDR, ++ .Size = MASS_STORAGE_IO_EPSIZE, ++ .Banks = 1, ++ }, ++ .TotalLUNs = TOTAL_LUNS, ++ }, ++ }; ++ ++/** Standard file stream for the CDC interface when set up, so that the virtual CDC COM port can be ++ * used like any regular character stream in the C APIs. ++ */ ++static FILE USBSerialStream; ++ ++ ++/** 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(); ++ ++ /* Create a regular character stream for the interface so that it can be used with the stdio.h functions */ ++ CDC_Device_CreateStream(&VirtualSerial_CDC_Interface, &USBSerialStream); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ CheckJoystickMovement(); ++ ++ /* Must throw away unused bytes from the host, or it will lock up while waiting for the device */ ++ CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface); ++ ++ CDC_Device_USBTask(&VirtualSerial_CDC_Interface); ++ MS_Device_USBTask(&Disk_MS_Interface); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#elif (ARCH == ARCH_XMEGA) ++ /* Start the PLL to multiply the 2MHz RC oscillator to 32MHz and switch the CPU core to run from it */ ++ XMEGACLK_StartPLL(CLOCK_SRC_INT_RC2MHZ, 2000000, F_CPU); ++ XMEGACLK_SetCPUClockSource(CLOCK_SRC_PLL); ++ ++ /* Start the 32MHz internal RC oscillator and start the DFLL to increase it to 48MHz using the USB SOF as a reference */ ++ XMEGACLK_StartInternalOscillator(CLOCK_SRC_INT_RC32MHZ); ++ XMEGACLK_StartDFLL(CLOCK_SRC_INT_RC32MHZ, DFLL_REF_INT_USBSOF, F_USB); ++ ++ PMIC.CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm; ++#endif ++ ++ /* Hardware Initialization */ ++ LEDs_Init(); ++ Joystick_Init(); ++ Dataflash_Init(); ++ USB_Init(); ++ ++ /* Check if the Dataflash is working, abort if not */ ++ if (!(DataflashManager_CheckDataflashOperation())) ++ { ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ for(;;); ++ } ++ ++ /* Clear Dataflash sector protections, if enabled */ ++ DataflashManager_ResetDataflashProtections(); ++} ++ ++/** 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; ++ ++ /* Write the string to the virtual COM port via the created character stream */ ++ fputs(ReportString, &USBSerialStream); ++ ++ /* Alternatively, without the stream: */ ++ // CDC_Device_SendString(&VirtualSerial_CDC_Interface, 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) ++{ ++ bool ConfigSuccess = true; ++ ++ ConfigSuccess &= CDC_Device_ConfigureEndpoints(&VirtualSerial_CDC_Interface); ++ ConfigSuccess &= MS_Device_ConfigureEndpoints(&Disk_MS_Interface); ++ ++ LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); ++} ++ ++/** Event handler for the library USB Control Request reception event. */ ++void EVENT_USB_Device_ControlRequest(void) ++{ ++ CDC_Device_ProcessControlRequest(&VirtualSerial_CDC_Interface); ++ MS_Device_ProcessControlRequest(&Disk_MS_Interface); ++} ++ ++/** CDC class driver callback function the processing of changes to the virtual ++ * control lines sent from the host.. ++ * ++ * \param[in] CDCInterfaceInfo Pointer to the CDC class interface configuration structure being referenced ++ */ ++void EVENT_CDC_Device_ControLineStateChanged(USB_ClassInfo_CDC_Device_t *const CDCInterfaceInfo) ++{ ++ /* You can get changes to the virtual CDC lines in this callback; a common ++ use-case is to use the Data Terminal Ready (DTR) flag to enable and ++ disable CDC communications in your application when set to avoid the ++ application blocking while waiting for a host to become ready and read ++ in the pending data from the USB endpoints. ++ */ ++ bool HostReady = (CDCInterfaceInfo->State.ControlLineStates.HostToDevice & CDC_CONTROL_LINE_OUT_DTR) != 0; ++} ++ ++/** Mass Storage class driver callback function the reception of SCSI commands from the host, which must be processed. ++ * ++ * \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface configuration structure being referenced ++ */ ++bool CALLBACK_MS_Device_SCSICommandReceived(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) ++{ ++ bool CommandSuccess; ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_BUSY); ++ CommandSuccess = SCSI_DecodeSCSICommand(MSInterfaceInfo); ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++ ++ return CommandSuccess; ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/VirtualSerialMassStorage/VirtualSerialMassStorage.h index 000000000,000000000..6df452db3 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/VirtualSerialMassStorage/VirtualSerialMassStorage.h @@@ -1,0 -1,0 +1,83 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 VirtualSerial.c. ++ */ ++ ++#ifndef _VIRTUALSERIAL_H_ ++#define _VIRTUALSERIAL_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <string.h> ++ ++ #include "Descriptors.h" ++ ++ #include "Lib/SCSI.h" ++ #include "Lib/DataflashManager.h" ++ #include "Config/AppConfig.h" ++ ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/Board/Joystick.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Platform/Platform.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) ++ ++ /** LED mask for the library LED driver, to indicate that the USB interface is busy. */ ++ #define LEDMASK_USB_BUSY LEDS_LED2 ++ ++ /* 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_ControlRequest(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/VirtualSerialMassStorage/VirtualSerialMassStorage.txt index 000000000,000000000..246775c22 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/VirtualSerialMassStorage/VirtualSerialMassStorage.txt @@@ -1,0 -1,0 +1,93 @@@ ++/** \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 Communications Device Class (Virtual Serial Port) and Mass Storage Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * \li Series 6 USB AVRs (AT90USBxxx6) ++ * \li Series 4 USB AVRs (ATMEGAxxU4) ++ * \li Series AU XMEGA AVRs (ATXMEGAxxxAxU) ++ * \li Series B XMEGA AVRs (ATXMEGAxxxBx) ++ * \li Series C XMEGA AVRs (ATXMEGAxxxCx) ++ * ++ * \section Sec_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) \n ++ * Mass Storage Device</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>Abstract Control Model (ACM) \n ++ * Bulk-Only Transport</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF CDC Class Standard \n ++ * USBIF Mass Storage Standard \n ++ * USB Bulk-Only Transport Standard \n ++ * SCSI Primary Commands Specification \n ++ * SCSI Block Commands Specification</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Combined Communications Device Class/Mass Storage demonstration application. ++ * This gives a simple reference application for implementing a combined ++ * CDC and Mass Storage device acting as a both a virtual serial port and a flash ++ * drive. Joystick actions are transmitted to the host as strings, and data can be ++ * written to or read from the exposed flash drive interface in the same manner as ++ * other USB flash drives. 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 Sec_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> ++ * <th><b>Define Name:</b></th> ++ * <th><b>Location:</b></th> ++ * <th><b>Description:</b></th> ++ * </tr> ++ * <tr> ++ * <td>TOTAL_LUNS</td> ++ * <td>AppConfig.h</td> ++ * <td>Total number of Logical Units (drives) in the device. The total device capacity is shared equally between each drive - ++ * this can be set to any positive non-zero amount.</td> ++ * </tr> ++ * <tr> ++ * <td>DISK_READ_ONLY</td> ++ * <td>AppConfig.h</td> ++ * <td>Configuration define, indicating if the disk should be write protected or not.</td> ++ * </tr> ++ */ ++ diff --cc lib/lufa/Demos/Device/ClassDriver/VirtualSerialMassStorage/asf.xml index 000000000,000000000..a73bcc21c new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/VirtualSerialMassStorage/asf.xml @@@ -1,0 -1,0 +1,70 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Virtual Serial CDC and Mass Storage Device Demo (Class Driver APIs)" id="lufa.demos.device.class.cdc_ms.example.avr8"> ++ <require idref="lufa.demos.device.class.cdc_ms"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <project caption="Virtual Serial CDC and Mass Storage Device Demo (Class Driver APIs)" id="lufa.demos.device.class.cdc_ms.example.xmega"> ++ <require idref="lufa.demos.device.class.cdc_ms"/> ++ <require idref="lufa.boards.dummy.xmega"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atxmega128a1u"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="32000000UL"/> ++ <build type="define" name="F_USB" value="48000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.device.class.cdc_ms" caption="Virtual Serial CDC and Mass Storage Device Demo (Class Driver APIs)"> ++ <info type="description" value="summary"> ++ Virtual Serial and Mass Storage device demo, implementing a virtual serial channel between the host PC and the device, and a basic USB storage disk using a Dataflash memory IC. This demo uses the user-friendly USB Class Driver APIs to provide a simple, abstracted interface into the USB stack. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Class Driver APIs"/> ++ <keyword value="USB Device"/> ++ <keyword value="CDC Class"/> ++ <keyword value="Mass Storage Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="VirtualSerialMassStorage.txt"/> ++ <build type="distribute" subtype="user-file" value="LUFA VirtualSerialMassStorage.inf"/> ++ ++ <build type="c-source" value="VirtualSerialMassStorage.c"/> ++ <build type="c-source" value="Lib/DataflashManager.c"/> ++ <build type="c-source" value="Lib/SCSI.c"/> ++ <build type="c-source" value="Descriptors.c"/> ++ <build type="header-file" value="VirtualSerialMassStorage.h"/> ++ <build type="header-file" value="Descriptors.h"/> ++ <build type="header-file" value="Lib/DataflashManager.h"/> ++ <build type="header-file" value="Lib/SCSI.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="module-config" subtype="required-header-file" value="AppConfig.h"/> ++ <build type="header-file" value="Config/AppConfig.h"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ <require idref="lufa.drivers.board.joystick"/> ++ <require idref="lufa.drivers.board.dataflash"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Device/ClassDriver/VirtualSerialMassStorage/doxyfile index 000000000,000000000..ff418b91d new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/VirtualSerialMassStorage/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Virtual Serial/Mass Storage 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Device/ClassDriver/VirtualSerialMassStorage/makefile index 000000000,000000000..e40ee286f new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/VirtualSerialMassStorage/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = VirtualSerialMassStorage ++SRC = $(TARGET).c Descriptors.c Lib/DataflashManager.c Lib/SCSI.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Device/ClassDriver/VirtualSerialMouse/Config/LUFAConfig.h index 000000000,000000000..0ec4635eb new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/VirtualSerialMouse/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,126 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++ #define USB_DEVICE_ONLY ++// #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++ #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #elif (ARCH == ARCH_XMEGA) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_RC32MCLKSRC | USB_OPT_BUSEVENT_PRIHIGH) ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++ #define MAX_ENDPOINT_INDEX 4 ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Device/ClassDriver/VirtualSerialMouse/Descriptors.c index 000000000,000000000..b4133d8b8 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/VirtualSerialMouse/Descriptors.c @@@ -1,0 -1,0 +1,323 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special ++ * computer-readable structures which the host requests upon device enumeration, to determine ++ * the device's capabilities and functions. ++ */ ++ ++#include "Descriptors.h" ++ ++ ++/** HID class report descriptor. This is a special descriptor constructed with values from the ++ * USBIF HID class specification to describe the reports and capabilities of the HID device. This ++ * descriptor is parsed by the host and its contents used to determine what data (and in what encoding) ++ * the device will send, and what it may be sent back from the host. Refer to the HID specification for ++ * more details on HID report descriptors. ++ */ ++const USB_Descriptor_HIDReport_Datatype_t PROGMEM MouseReport[] = ++{ ++ /* Use the HID class driver's standard Mouse report. ++ * Min X/Y Axis values: -1 ++ * Max X/Y Axis values: 1 ++ * Min physical X/Y Axis values (used to determine resolution): -1 ++ * Max physical X/Y Axis values (used to determine resolution): 1 ++ * Buttons: 3 ++ * Absolute screen coordinates: false ++ */ ++ HID_DESCRIPTOR_MOUSE(-1, 1, -1, 1, 3, false) ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = ++{ ++ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, ++ ++ .USBSpecification = VERSION_BCD(1,1,0), ++ .Class = USB_CSCP_IADDeviceClass, ++ .SubClass = USB_CSCP_IADDeviceSubclass, ++ .Protocol = USB_CSCP_IADDeviceProtocol, ++ ++ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, ++ ++ .VendorID = 0x03EB, ++ .ProductID = 0x2062, ++ .ReleaseNumber = VERSION_BCD(0,0,1), ++ ++ .ManufacturerStrIndex = STRING_ID_Manufacturer, ++ .ProductStrIndex = STRING_ID_Product, ++ .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. ++ */ ++const 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_RESERVED | USB_CONFIG_ATTR_SELFPOWERED), ++ ++ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) ++ }, ++ ++ .CDC_IAD = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation}, ++ ++ .FirstInterfaceIndex = INTERFACE_ID_CDC_CCI, ++ .TotalInterfaces = 2, ++ ++ .Class = CDC_CSCP_CDCClass, ++ .SubClass = CDC_CSCP_ACMSubclass, ++ .Protocol = CDC_CSCP_ATCommandProtocol, ++ ++ .IADStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .CDC_CCI_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_CDC_CCI, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 1, ++ ++ .Class = CDC_CSCP_CDCClass, ++ .SubClass = CDC_CSCP_ACMSubclass, ++ .Protocol = CDC_CSCP_ATCommandProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .CDC_Functional_Header = ++ { ++ .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface}, ++ .Subtype = CDC_DSUBTYPE_CSInterface_Header, ++ ++ .CDCSpecification = VERSION_BCD(1,1,0), ++ }, ++ ++ .CDC_Functional_ACM = ++ { ++ .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface}, ++ .Subtype = CDC_DSUBTYPE_CSInterface_ACM, ++ ++ .Capabilities = 0x06, ++ }, ++ ++ .CDC_Functional_Union = ++ { ++ .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface}, ++ .Subtype = CDC_DSUBTYPE_CSInterface_Union, ++ ++ .MasterInterfaceNumber = INTERFACE_ID_CDC_CCI, ++ .SlaveInterfaceNumber = INTERFACE_ID_CDC_DCI, ++ }, ++ ++ .CDC_NotificationEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = CDC_NOTIFICATION_EPADDR, ++ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = CDC_NOTIFICATION_EPSIZE, ++ .PollingIntervalMS = 0xFF ++ }, ++ ++ .CDC_DCI_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_CDC_DCI, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 2, ++ ++ .Class = CDC_CSCP_CDCDataClass, ++ .SubClass = CDC_CSCP_NoDataSubclass, ++ .Protocol = CDC_CSCP_NoDataProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .CDC_DataOutEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = CDC_RX_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = CDC_TXRX_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++ ++ .CDC_DataInEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = CDC_TX_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = CDC_TXRX_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++ ++ .HID_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_Mouse, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 1, ++ ++ .Class = HID_CSCP_HIDClass, ++ .SubClass = HID_CSCP_BootSubclass, ++ .Protocol = HID_CSCP_MouseBootProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .HID_MouseHID = ++ { ++ .Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID}, ++ ++ .HIDSpec = VERSION_BCD(1,1,1), ++ .CountryCode = 0x00, ++ .TotalReportDescriptors = 1, ++ .HIDReportType = HID_DTYPE_Report, ++ .HIDReportLength = sizeof(MouseReport) ++ }, ++ ++ .HID_ReportINEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = MOUSE_EPADDR, ++ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = MOUSE_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ } ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_String_t PROGMEM LanguageString = USB_STRING_DESCRIPTOR_ARRAY(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(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 uint16_t wIndex, ++ const void** const DescriptorAddress) ++{ ++ const uint8_t DescriptorType = (wValue >> 8); ++ const uint8_t DescriptorNumber = (wValue & 0xFF); ++ ++ const void* Address = NULL; ++ uint16_t Size = NO_DESCRIPTOR; ++ ++ switch (DescriptorType) ++ { ++ case DTYPE_Device: ++ Address = &DeviceDescriptor; ++ Size = sizeof(USB_Descriptor_Device_t); ++ break; ++ case DTYPE_Configuration: ++ Address = &ConfigurationDescriptor; ++ Size = sizeof(USB_Descriptor_Configuration_t); ++ break; ++ case DTYPE_String: ++ switch (DescriptorNumber) ++ { ++ case STRING_ID_Language: ++ Address = &LanguageString; ++ Size = pgm_read_byte(&LanguageString.Header.Size); ++ break; ++ case STRING_ID_Manufacturer: ++ Address = &ManufacturerString; ++ Size = pgm_read_byte(&ManufacturerString.Header.Size); ++ break; ++ case STRING_ID_Product: ++ Address = &ProductString; ++ Size = pgm_read_byte(&ProductString.Header.Size); ++ break; ++ } ++ ++ break; ++ case HID_DTYPE_HID: ++ Address = &ConfigurationDescriptor.HID_MouseHID; ++ Size = sizeof(USB_HID_Descriptor_HID_t); ++ break; ++ case HID_DTYPE_Report: ++ Address = &MouseReport; ++ Size = sizeof(MouseReport); ++ break; ++ } ++ ++ *DescriptorAddress = Address; ++ return Size; ++} ++ diff --cc lib/lufa/Demos/Device/ClassDriver/VirtualSerialMouse/Descriptors.h index 000000000,000000000..85c1e2c96 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/VirtualSerialMouse/Descriptors.h @@@ -1,0 -1,0 +1,123 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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> ++ ++ /* Macros: */ ++ /** Endpoint address of the CDC device-to-host notification IN endpoint. */ ++ #define CDC_NOTIFICATION_EPADDR (ENDPOINT_DIR_IN | 2) ++ ++ /** Endpoint address of the CDC device-to-host data IN endpoint. */ ++ #define CDC_TX_EPADDR (ENDPOINT_DIR_IN | 3) ++ ++ /** Endpoint address of the CDC host-to-device data OUT endpoint. */ ++ #define CDC_RX_EPADDR (ENDPOINT_DIR_OUT | 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 address of the Mouse HID reporting IN endpoint. */ ++ #define MOUSE_EPADDR (ENDPOINT_DIR_IN | 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; ++ ++ // CDC Control Interface ++ USB_Descriptor_Interface_Association_t CDC_IAD; ++ USB_Descriptor_Interface_t CDC_CCI_Interface; ++ USB_CDC_Descriptor_FunctionalHeader_t CDC_Functional_Header; ++ USB_CDC_Descriptor_FunctionalACM_t CDC_Functional_ACM; ++ USB_CDC_Descriptor_FunctionalUnion_t CDC_Functional_Union; ++ USB_Descriptor_Endpoint_t CDC_NotificationEndpoint; ++ ++ // CDC Data Interface ++ USB_Descriptor_Interface_t CDC_DCI_Interface; ++ USB_Descriptor_Endpoint_t CDC_DataOutEndpoint; ++ USB_Descriptor_Endpoint_t CDC_DataInEndpoint; ++ ++ // Mouse HID Interface ++ USB_Descriptor_Interface_t HID_Interface; ++ USB_HID_Descriptor_HID_t HID_MouseHID; ++ USB_Descriptor_Endpoint_t HID_ReportINEndpoint; ++ } USB_Descriptor_Configuration_t; ++ ++ /** Enum for the device interface descriptor IDs within the device. Each interface descriptor ++ * should have a unique ID index associated with it, which can be used to refer to the ++ * interface from other descriptors. ++ */ ++ enum InterfaceDescriptors_t ++ { ++ INTERFACE_ID_CDC_CCI = 0, /**< CDC CCI interface descriptor ID */ ++ INTERFACE_ID_CDC_DCI = 1, /**< CDC DCI interface descriptor ID */ ++ INTERFACE_ID_Mouse = 2, /**< Mouse interface descriptor ID */ ++ }; ++ ++ /** Enum for the device string descriptor IDs within the device. Each string descriptor should ++ * have a unique ID index associated with it, which can be used to refer to the string from ++ * other descriptors. ++ */ ++ enum StringDescriptors_t ++ { ++ STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */ ++ STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */ ++ STRING_ID_Product = 2, /**< Product string ID */ ++ }; ++ ++ /* Function Prototypes: */ ++ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ++ const uint16_t wIndex, ++ const void** const DescriptorAddress) ++ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/VirtualSerialMouse/LUFA VirtualSerialMouse.inf index 000000000,000000000..ac47e066b new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/VirtualSerialMouse/LUFA VirtualSerialMouse.inf @@@ -1,0 -1,0 +1,66 @@@ ++;************************************************************ ++; Windows USB CDC ACM Setup File ++; Copyright (c) 2000 Microsoft Corporation ++;************************************************************ ++ ++[DefaultInstall] ++CopyINF="LUFA VirtualSerialMouse.inf" ++ ++[Version] ++Signature="$Windows NT$" ++Class=Ports ++ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} ++Provider=%MFGNAME% ++DriverVer=7/1/2012,10.0.0.0 ++ ++[Manufacturer] ++%MFGNAME%=DeviceList, NTx86, NTamd64, NTia64 ++ ++[SourceDisksNames] ++ ++[SourceDisksFiles] ++ ++[DestinationDirs] ++DefaultDestDir=12 ++ ++[DriverInstall] ++Include=mdmcpq.inf ++CopyFiles=FakeModemCopyFileSection ++AddReg=DriverInstall.AddReg ++ ++[DriverInstall.Services] ++Include=mdmcpq.inf ++AddService=usbser, 0x00000002, LowerFilter_Service_Inst ++ ++[DriverInstall.AddReg] ++HKR,,EnumPropPages32,,"msports.dll,SerialPortPropPageProvider" ++ ++;------------------------------------------------------------------------------ ++; 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. ++;------------------------------------------------------------------------------ ++[DeviceList] ++%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_2062&MI_00 ++ ++[DeviceList.NTx86] ++%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_2062&MI_00 ++ ++[DeviceList.NTamd64] ++%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_2062&MI_00 ++ ++[DeviceList.NTia64] ++%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_2062&MI_00 ++ ++;------------------------------------------------------------------------------ ++; String Definitions ++;------------------------------------------------------------------------------ ++;Modify these strings to customize your device ++;------------------------------------------------------------------------------ ++[Strings] ++MFGNAME="http://www.lufa-lib.org" ++DESCRIPTION="LUFA CDC-ACM Virtual Serial Port" diff --cc lib/lufa/Demos/Device/ClassDriver/VirtualSerialMouse/VirtualSerialMouse.c index 000000000,000000000..134958060 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/VirtualSerialMouse/VirtualSerialMouse.c @@@ -1,0 -1,0 +1,282 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 VirtualSerialMouse demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "VirtualSerialMouse.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 = INTERFACE_ID_CDC_CCI, ++ .DataINEndpoint = ++ { ++ .Address = CDC_TX_EPADDR, ++ .Size = CDC_TXRX_EPSIZE, ++ .Banks = 1, ++ }, ++ .DataOUTEndpoint = ++ { ++ .Address = CDC_RX_EPADDR, ++ .Size = CDC_TXRX_EPSIZE, ++ .Banks = 1, ++ }, ++ .NotificationEndpoint = ++ { ++ .Address = CDC_NOTIFICATION_EPADDR, ++ .Size = CDC_NOTIFICATION_EPSIZE, ++ .Banks = 1, ++ }, ++ }, ++ }; ++ ++/** Buffer to hold the previously generated Mouse HID report, for comparison purposes inside the HID class driver. */ ++static 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 = INTERFACE_ID_Mouse, ++ .ReportINEndpoint = ++ { ++ .Address = MOUSE_EPADDR, ++ .Size = MOUSE_EPSIZE, ++ .Banks = 1, ++ }, ++ .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); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ CheckJoystickMovement(); ++ ++ /* Must throw away unused bytes from the host, or it will lock up while waiting for the device */ ++ 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) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#elif (ARCH == ARCH_XMEGA) ++ /* Start the PLL to multiply the 2MHz RC oscillator to 32MHz and switch the CPU core to run from it */ ++ XMEGACLK_StartPLL(CLOCK_SRC_INT_RC2MHZ, 2000000, F_CPU); ++ XMEGACLK_SetCPUClockSource(CLOCK_SRC_PLL); ++ ++ /* Start the 32MHz internal RC oscillator and start the DFLL to increase it to 48MHz using the USB SOF as a reference */ ++ XMEGACLK_StartInternalOscillator(CLOCK_SRC_INT_RC32MHZ); ++ XMEGACLK_StartDFLL(CLOCK_SRC_INT_RC32MHZ, DFLL_REF_INT_USBSOF, F_USB); ++ ++ PMIC.CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm; ++#endif ++ ++ /* 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); ++ } ++} ++ ++/** 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) ++{ ++ bool ConfigSuccess = true; ++ ++ ConfigSuccess &= HID_Device_ConfigureEndpoints(&Mouse_HID_Interface); ++ ConfigSuccess &= CDC_Device_ConfigureEndpoints(&VirtualSerial_CDC_Interface); ++ ++ USB_Device_EnableSOFEvents(); ++ ++ LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); ++} ++ ++/** Event handler for the library USB Control Request reception event. */ ++void EVENT_USB_Device_ControlRequest(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[in] ReportType Type of the report to create, either HID_REPORT_ITEM_In or HID_REPORT_ITEM_Feature ++ * \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 \c true to force the sending of the report, \c 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, ++ const uint8_t ReportType, ++ void* ReportData, ++ uint16_t* const 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_LEFT) ++ MouseReport->X = -1; ++ else if (JoyStatus_LCL & JOY_RIGHT) ++ 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] ReportType The type of report that the host has sent, either HID_REPORT_ITEM_Out or HID_REPORT_ITEM_Feature ++ * \param[in] ReportData Pointer to a buffer where the received 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 uint8_t ReportType, ++ 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 ++} ++ ++/** CDC class driver callback function the processing of changes to the virtual ++ * control lines sent from the host.. ++ * ++ * \param[in] CDCInterfaceInfo Pointer to the CDC class interface configuration structure being referenced ++ */ ++void EVENT_CDC_Device_ControLineStateChanged(USB_ClassInfo_CDC_Device_t *const CDCInterfaceInfo) ++{ ++ /* You can get changes to the virtual CDC lines in this callback; a common ++ use-case is to use the Data Terminal Ready (DTR) flag to enable and ++ disable CDC communications in your application when set to avoid the ++ application blocking while waiting for a host to become ready and read ++ in the pending data from the USB endpoints. ++ */ ++ bool HostReady = (CDCInterfaceInfo->State.ControlLineStates.HostToDevice & CDC_CONTROL_LINE_OUT_DTR) != 0; ++} diff --cc lib/lufa/Demos/Device/ClassDriver/VirtualSerialMouse/VirtualSerialMouse.h index 000000000,000000000..0b8a03568 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/VirtualSerialMouse/VirtualSerialMouse.h @@@ -1,0 -1,0 +1,88 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 VirtualSerialMouse.c. ++ */ ++ ++#ifndef _VIRTUALSERIAL_MOUSE_H_ ++#define _VIRTUALSERIAL_MOUSE_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <string.h> ++ ++ #include "Descriptors.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/Platform/Platform.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_ControlRequest(void); ++ void EVENT_USB_Device_StartOfFrame(void); ++ ++ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, ++ uint8_t* const ReportID, ++ const uint8_t ReportType, ++ void* ReportData, ++ uint16_t* const ReportSize); ++ void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, ++ const uint8_t ReportID, ++ const uint8_t ReportType, ++ const void* ReportData, ++ const uint16_t ReportSize); ++#endif ++ diff --cc lib/lufa/Demos/Device/ClassDriver/VirtualSerialMouse/VirtualSerialMouse.txt index 000000000,000000000..97ba8714e new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/VirtualSerialMouse/VirtualSerialMouse.txt @@@ -1,0 -1,0 +1,79 @@@ ++/** \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 Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * \li Series 6 USB AVRs (AT90USBxxx6) ++ * \li Series 4 USB AVRs (ATMEGAxxU4) ++ * \li Series AU XMEGA AVRs (ATXMEGAxxxAxU) ++ * \li Series B XMEGA AVRs (ATXMEGAxxxBx) ++ * \li Series C XMEGA AVRs (ATXMEGAxxxCx) ++ * ++ * \section Sec_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) \n ++ * Human Interface Device Class (HID)</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>Abstract Control Model (ACM) \n ++ * Mouse Subclass</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF CDC Class Standard</td> ++ * <td>USBIF HID Specification \n ++ * USBIF HID Usage Tables</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_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 Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Device/ClassDriver/VirtualSerialMouse/asf.xml index 000000000,000000000..40d13050b new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/VirtualSerialMouse/asf.xml @@@ -1,0 -1,0 +1,64 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Virtual Serial CDC and Mouse HID Device Demo (Class Driver APIs)" id="lufa.demos.device.class.cdc_mouse.example.avr8"> ++ <require idref="lufa.demos.device.class.cdc_mouse"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <project caption="Virtual Serial CDC and Mouse HID Device Demo (Class Driver APIs)" id="lufa.demos.device.class.cdc_mouse.example.xmega"> ++ <require idref="lufa.demos.device.class.cdc_mouse"/> ++ <require idref="lufa.boards.dummy.xmega"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atxmega128a1u"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="32000000UL"/> ++ <build type="define" name="F_USB" value="48000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.device.class.cdc_mouse" caption="Virtual Serial CDC and Mouse HID Device Demo (Class Driver APIs)"> ++ <info type="description" value="summary"> ++ Virtual Serial and Mouse device demo, implementing a virtual serial channel between the host PC and the device, and a USB mouse. This demo uses the user-friendly USB Class Driver APIs to provide a simple, abstracted interface into the USB stack. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Class Driver APIs"/> ++ <keyword value="USB Device"/> ++ <keyword value="CDC Class"/> ++ <keyword value="HID Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="VirtualSerialMouse.txt"/> ++ <build type="distribute" subtype="user-file" value="LUFA VirtualSerialMouse.inf"/> ++ ++ <build type="c-source" value="VirtualSerialMouse.c"/> ++ <build type="c-source" value="Descriptors.c"/> ++ <build type="header-file" value="VirtualSerialMouse.h"/> ++ <build type="header-file" value="Descriptors.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ <require idref="lufa.drivers.board.buttons"/> ++ <require idref="lufa.drivers.board.joystick"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Device/ClassDriver/VirtualSerialMouse/doxyfile index 000000000,000000000..36c6a6ecc new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/VirtualSerialMouse/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Combined Virtual Serial 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Device/ClassDriver/VirtualSerialMouse/makefile index 000000000,000000000..5272b2b96 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/VirtualSerialMouse/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = VirtualSerialMouse ++SRC = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Device/ClassDriver/makefile index 000000000,000000000..a713c9d4c new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/makefile @@@ -1,0 -1,0 +1,46 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++ ++# Makefile to build all the LUFA Device Demos. Call with "make all" to ++# rebuild all Device demos. ++ ++# Projects are pre-cleaned before each one is built, to ensure any ++# custom LUFA library build options are reflected in the compiled ++# code. ++ ++PROJECT_DIRECTORIES := $(shell ls -d */) ++ ++# This makefile is potentially infinitely recursive if something really bad ++# happens when determining the set of project directories - hard-abort if ++# more than 10 levels deep to avoid angry emails. ++ifeq ($(MAKELEVEL), 10) ++ $(error EMERGENCY ABORT: INFINITE RECURSION DETECTED) ++endif ++ ++# Need to special-case building without a per-project object directory ++ifeq ($(OBJDIR),) ++ # If no target specified, force "clean all" and disallow parallel build ++ ifeq ($(MAKECMDGOALS),) ++ MAKECMDGOALS := clean all ++ .NOTPARALLEL: ++ endif ++ ++ # If one of the targets is to build, force "clean" beforehand and disallow parallel build ++ ifneq ($(findstring all, $(MAKECMDGOALS)),) ++ MAKECMDGOALS := clean $(MAKECMDGOALS) ++ .NOTPARALLEL: ++ endif ++endif ++ ++%: $(PROJECT_DIRECTORIES) ++ @echo . > /dev/null ++ ++$(PROJECT_DIRECTORIES): ++ @$(MAKE) -C $@ $(MAKECMDGOALS) ++ ++.PHONY: $(PROJECT_DIRECTORIES) diff --cc lib/lufa/Demos/Device/Incomplete/TestAndMeasurement/Config/LUFAConfig.h index 000000000,000000000..0ec4635eb new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/Incomplete/TestAndMeasurement/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,126 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++ #define USB_DEVICE_ONLY ++// #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++ #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #elif (ARCH == ARCH_XMEGA) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_RC32MCLKSRC | USB_OPT_BUSEVENT_PRIHIGH) ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++ #define MAX_ENDPOINT_INDEX 4 ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Device/Incomplete/TestAndMeasurement/Descriptors.c index 000000000,000000000..96596c161 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/Incomplete/TestAndMeasurement/Descriptors.c @@@ -1,0 -1,0 +1,205 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ Copyright 2010 Peter Lawrence (majbthrd [at] gmail [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special ++ * computer-readable structures which the host requests upon device enumeration, to determine ++ * the device's capabilities and functions. ++ */ ++ ++#include "Descriptors.h" ++ ++ ++/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall ++ * device characteristics, including the supported USB version, control endpoint size and the ++ * number of device configurations. The descriptor is read out by the USB host when the enumeration ++ * process begins. ++ */ ++const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = ++{ ++ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, ++ ++ .USBSpecification = VERSION_BCD(1,1,0), ++ .Class = 0x00, ++ .SubClass = 0x00, ++ .Protocol = 0x00, ++ ++ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, ++ ++ .VendorID = 0x03EB, ++ .ProductID = 0x2065, ++ .ReleaseNumber = VERSION_BCD(0,0,1), ++ ++ .ManufacturerStrIndex = STRING_ID_Manufacturer, ++ .ProductStrIndex = STRING_ID_Product, ++ .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. ++ */ ++const 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 = 1, ++ ++ .ConfigurationNumber = 1, ++ .ConfigurationStrIndex = NO_DESCRIPTOR, ++ ++ .ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED), ++ ++ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) ++ }, ++ ++ .TM_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_TestAndMeasurement, ++ .AlternateSetting = 0x00, ++ ++ .TotalEndpoints = 3, ++ ++ .Class = 0xFE, ++ .SubClass = 0x03, ++ .Protocol = 0x01, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .TM_DataOutEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = TMC_OUT_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = TMC_IO_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++ ++ .TM_DataInEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = TMC_IN_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = TMC_IO_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++ ++ .TM_NotificationEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = TMC_NOTIFICATION_EPADDR, ++ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = TMC_NOTIFICATION_EPSIZE, ++ .PollingIntervalMS = 0xFF ++ } ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_String_t PROGMEM LanguageString = USB_STRING_DESCRIPTOR_ARRAY(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"LUFA TMC 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 uint16_t wIndex, ++ const void** const DescriptorAddress) ++{ ++ const uint8_t DescriptorType = (wValue >> 8); ++ const uint8_t DescriptorNumber = (wValue & 0xFF); ++ ++ const void* Address = NULL; ++ uint16_t Size = NO_DESCRIPTOR; ++ ++ switch (DescriptorType) ++ { ++ case DTYPE_Device: ++ Address = &DeviceDescriptor; ++ Size = sizeof(USB_Descriptor_Device_t); ++ break; ++ case DTYPE_Configuration: ++ Address = &ConfigurationDescriptor; ++ Size = sizeof(USB_Descriptor_Configuration_t); ++ break; ++ case DTYPE_String: ++ switch (DescriptorNumber) ++ { ++ case STRING_ID_Language: ++ Address = &LanguageString; ++ Size = pgm_read_byte(&LanguageString.Header.Size); ++ break; ++ case STRING_ID_Manufacturer: ++ Address = &ManufacturerString; ++ Size = pgm_read_byte(&ManufacturerString.Header.Size); ++ break; ++ case STRING_ID_Product: ++ Address = &ProductString; ++ Size = pgm_read_byte(&ProductString.Header.Size); ++ break; ++ } ++ ++ break; ++ } ++ ++ *DescriptorAddress = Address; ++ return Size; ++} ++ diff --cc lib/lufa/Demos/Device/Incomplete/TestAndMeasurement/Descriptors.h index 000000000,000000000..628b63a50 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/Incomplete/TestAndMeasurement/Descriptors.h @@@ -1,0 -1,0 +1,104 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ Copyright 2010 Peter Lawrence (majbthrd [at] gmail [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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> ++ ++ /* Macros: */ ++ /** Endpoint address of the TMC notification IN endpoint. */ ++ #define TMC_NOTIFICATION_EPADDR (ENDPOINT_DIR_IN | 2) ++ ++ /** Endpoint address of the TMC device-to-host data IN endpoint. */ ++ #define TMC_IN_EPADDR (ENDPOINT_DIR_IN | 3) ++ ++ /** Endpoint address of the TMC host-to-device data OUT endpoint. */ ++ #define TMC_OUT_EPADDR (ENDPOINT_DIR_OUT | 4) ++ ++ /** Size in bytes of the TMC data endpoints. */ ++ #define TMC_IO_EPSIZE 64 ++ ++ /** Size in bytes of the TMC notification endpoint. */ ++ #define TMC_NOTIFICATION_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; ++ ++ // Test and Measurement Interface ++ USB_Descriptor_Interface_t TM_Interface; ++ USB_Descriptor_Endpoint_t TM_DataOutEndpoint; ++ USB_Descriptor_Endpoint_t TM_DataInEndpoint; ++ USB_Descriptor_Endpoint_t TM_NotificationEndpoint; ++ } USB_Descriptor_Configuration_t; ++ ++ /** Enum for the device interface descriptor IDs within the device. Each interface descriptor ++ * should have a unique ID index associated with it, which can be used to refer to the ++ * interface from other descriptors. ++ */ ++ enum InterfaceDescriptors_t ++ { ++ INTERFACE_ID_TestAndMeasurement = 0, /**< Test and measurement interface descriptor ID */ ++ }; ++ ++ /** Enum for the device string descriptor IDs within the device. Each string descriptor should ++ * have a unique ID index associated with it, which can be used to refer to the string from ++ * other descriptors. ++ */ ++ enum StringDescriptors_t ++ { ++ STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */ ++ STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */ ++ STRING_ID_Product = 2, /**< Product string ID */ ++ }; ++ ++ /* Function Prototypes: */ ++ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ++ const uint16_t wIndex, ++ const void** const DescriptorAddress) ++ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.c index 000000000,000000000..c324be2d1 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.c @@@ -1,0 -1,0 +1,476 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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. ++*/ ++ ++#include "TestAndMeasurement.h" ++ ++/** Contains the (usually static) capabilities of the TMC device. This table is requested by the ++ * host upon enumeration to give it information on what features of the Test and Measurement USB ++ * Class the device supports. ++ */ ++TMC_Capabilities_t Capabilities = ++ { ++ .Status = TMC_STATUS_SUCCESS, ++ .TMCVersion = VERSION_BCD(1.00), ++ ++ .Interface = ++ { ++ .ListenOnly = false, ++ .TalkOnly = false, ++ .PulseIndicateSupported = false, ++ }, ++ ++ .Device = ++ { ++ .SupportsAbortINOnMatch = false, ++ }, ++ }; ++ ++/** Current TMC control request that is being processed */ ++static uint8_t RequestInProgress = 0; ++ ++/** Stream callback abort flag for bulk IN data */ ++static bool IsTMCBulkINReset = false; ++ ++/** Stream callback abort flag for bulk OUT data */ ++static bool IsTMCBulkOUTReset = false; ++ ++/** Last used tag value for data transfers */ ++static uint8_t CurrentTransferTag = 0; ++ ++/** Length of last data transfer, for reporting to the host in case an in-progress transfer is aborted */ ++static uint16_t LastTransferLength = 0; ++ ++/** Buffer to hold the next message to sent to the TMC host */ ++static uint8_t NextResponseBuffer[64]; ++ ++/** Indicates the length of the next response to send */ ++static uint8_t NextResponseLen; ++ ++/** 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); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ TMC_Task(); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#elif (ARCH == ARCH_XMEGA) ++ /* Start the PLL to multiply the 2MHz RC oscillator to 32MHz and switch the CPU core to run from it */ ++ XMEGACLK_StartPLL(CLOCK_SRC_INT_RC2MHZ, 2000000, F_CPU); ++ XMEGACLK_SetCPUClockSource(CLOCK_SRC_PLL); ++ ++ /* Start the 32MHz internal RC oscillator and start the DFLL to increase it to 48MHz using the USB SOF as a reference */ ++ XMEGACLK_StartInternalOscillator(CLOCK_SRC_INT_RC32MHZ); ++ XMEGACLK_StartDFLL(CLOCK_SRC_INT_RC32MHZ, DFLL_REF_INT_USBSOF, F_USB); ++ ++ PMIC.CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm; ++#endif ++ ++ /* Hardware Initialization */ ++ LEDs_Init(); ++ USB_Init(); ++} ++ ++/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and ++ * starts the library USB task to begin the enumeration and USB management process. ++ */ ++void EVENT_USB_Device_Connect(void) ++{ ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via ++ * the status LEDs and stops the USB management and CDC management tasks. ++ */ ++void EVENT_USB_Device_Disconnect(void) ++{ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration ++ * of the USB device after enumeration - the device endpoints are configured and the CDC management task started. ++ */ ++void EVENT_USB_Device_ConfigurationChanged(void) ++{ ++ bool ConfigSuccess = true; ++ ++ /* Setup TMC In, Out and Notification Endpoints */ ++ ConfigSuccess &= Endpoint_ConfigureEndpoint(TMC_NOTIFICATION_EPADDR, EP_TYPE_INTERRUPT, TMC_IO_EPSIZE, 1); ++ ConfigSuccess &= Endpoint_ConfigureEndpoint(TMC_IN_EPADDR, EP_TYPE_BULK, TMC_IO_EPSIZE, 1); ++ ConfigSuccess &= Endpoint_ConfigureEndpoint(TMC_OUT_EPADDR, EP_TYPE_BULK, TMC_IO_EPSIZE, 1); ++ ++ /* Indicate endpoint configuration success or failure */ ++ LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); ++} ++ ++/** Event handler for the USB_ControlRequest event. This is used to catch and process control requests sent to ++ * the device from the USB host before passing along unhandled control requests to the library for processing ++ * internally. ++ */ ++void EVENT_USB_Device_ControlRequest(void) ++{ ++ uint8_t TMCRequestStatus = TMC_STATUS_SUCCESS; ++ ++ /* Process TMC specific control requests */ ++ switch (USB_ControlRequest.bRequest) ++ { ++ case Req_InitiateAbortBulkOut: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_ENDPOINT)) ++ { ++ /* Check that no split transaction is already in progress and the data transfer tag is valid */ ++ if (RequestInProgress != 0) ++ { ++ TMCRequestStatus = TMC_STATUS_SPLIT_IN_PROGRESS; ++ } ++ else if (USB_ControlRequest.wValue != CurrentTransferTag) ++ { ++ TMCRequestStatus = TMC_STATUS_TRANSFER_NOT_IN_PROGRESS; ++ } ++ else ++ { ++ /* Indicate that all in-progress/pending data OUT requests should be aborted */ ++ IsTMCBulkOUTReset = true; ++ ++ /* Save the split request for later checking when a new request is received */ ++ RequestInProgress = Req_InitiateAbortBulkOut; ++ } ++ ++ Endpoint_ClearSETUP(); ++ ++ /* Write the request response byte */ ++ Endpoint_Write_8(TMCRequestStatus); ++ ++ Endpoint_ClearIN(); ++ Endpoint_ClearStatusStage(); ++ } ++ ++ break; ++ case Req_CheckAbortBulkOutStatus: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_ENDPOINT)) ++ { ++ /* Check that an ABORT BULK OUT transaction has been requested and that the request has completed */ ++ if (RequestInProgress != Req_InitiateAbortBulkOut) ++ TMCRequestStatus = TMC_STATUS_SPLIT_NOT_IN_PROGRESS; ++ else if (IsTMCBulkOUTReset) ++ TMCRequestStatus = TMC_STATUS_PENDING; ++ else ++ RequestInProgress = 0; ++ ++ Endpoint_ClearSETUP(); ++ ++ /* Write the request response bytes */ ++ Endpoint_Write_8(TMCRequestStatus); ++ Endpoint_Write_16_LE(0); ++ Endpoint_Write_32_LE(LastTransferLength); ++ ++ Endpoint_ClearIN(); ++ Endpoint_ClearStatusStage(); ++ } ++ ++ break; ++ case Req_InitiateAbortBulkIn: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_ENDPOINT)) ++ { ++ /* Check that no split transaction is already in progress and the data transfer tag is valid */ ++ if (RequestInProgress != 0) ++ { ++ TMCRequestStatus = TMC_STATUS_SPLIT_IN_PROGRESS; ++ } ++ else if (USB_ControlRequest.wValue != CurrentTransferTag) ++ { ++ TMCRequestStatus = TMC_STATUS_TRANSFER_NOT_IN_PROGRESS; ++ } ++ else ++ { ++ /* Indicate that all in-progress/pending data IN requests should be aborted */ ++ IsTMCBulkINReset = true; ++ ++ /* Save the split request for later checking when a new request is received */ ++ RequestInProgress = Req_InitiateAbortBulkIn; ++ } ++ ++ Endpoint_ClearSETUP(); ++ ++ /* Write the request response bytes */ ++ Endpoint_Write_8(TMCRequestStatus); ++ Endpoint_Write_8(CurrentTransferTag); ++ ++ Endpoint_ClearIN(); ++ Endpoint_ClearStatusStage(); ++ } ++ ++ break; ++ case Req_CheckAbortBulkInStatus: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_ENDPOINT)) ++ { ++ /* Check that an ABORT BULK IN transaction has been requested and that the request has completed */ ++ if (RequestInProgress != Req_InitiateAbortBulkIn) ++ TMCRequestStatus = TMC_STATUS_SPLIT_NOT_IN_PROGRESS; ++ else if (IsTMCBulkINReset) ++ TMCRequestStatus = TMC_STATUS_PENDING; ++ else ++ RequestInProgress = 0; ++ ++ Endpoint_ClearSETUP(); ++ ++ /* Write the request response bytes */ ++ Endpoint_Write_8(TMCRequestStatus); ++ Endpoint_Write_16_LE(0); ++ Endpoint_Write_32_LE(LastTransferLength); ++ ++ Endpoint_ClearIN(); ++ Endpoint_ClearStatusStage(); ++ } ++ ++ break; ++ case Req_InitiateClear: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) ++ { ++ /* Check that no split transaction is already in progress */ ++ if (RequestInProgress != 0) ++ { ++ Endpoint_Write_8(TMC_STATUS_SPLIT_IN_PROGRESS); ++ } ++ else ++ { ++ /* Indicate that all in-progress/pending data IN and OUT requests should be aborted */ ++ IsTMCBulkINReset = true; ++ IsTMCBulkOUTReset = true; ++ ++ /* Save the split request for later checking when a new request is received */ ++ RequestInProgress = Req_InitiateClear; ++ } ++ ++ Endpoint_ClearSETUP(); ++ ++ /* Write the request response byte */ ++ Endpoint_Write_8(TMCRequestStatus); ++ ++ Endpoint_ClearIN(); ++ Endpoint_ClearStatusStage(); ++ } ++ ++ break; ++ case Req_CheckClearStatus: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) ++ { ++ /* Check that a CLEAR transaction has been requested and that the request has completed */ ++ if (RequestInProgress != Req_InitiateClear) ++ TMCRequestStatus = TMC_STATUS_SPLIT_NOT_IN_PROGRESS; ++ else if (IsTMCBulkINReset || IsTMCBulkOUTReset) ++ TMCRequestStatus = TMC_STATUS_PENDING; ++ else ++ RequestInProgress = 0; ++ ++ Endpoint_ClearSETUP(); ++ ++ /* Write the request response bytes */ ++ Endpoint_Write_8(TMCRequestStatus); ++ Endpoint_Write_8(0); ++ ++ Endpoint_ClearIN(); ++ Endpoint_ClearStatusStage(); ++ } ++ ++ break; ++ case Req_GetCapabilities: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) ++ { ++ Endpoint_ClearSETUP(); ++ ++ /* Write the device capabilities to the control endpoint */ ++ Endpoint_Write_Control_Stream_LE(&Capabilities, sizeof(TMC_Capabilities_t)); ++ Endpoint_ClearOUT(); ++ } ++ ++ break; ++ } ++} ++ ++void ProcessSentMessage(uint8_t* const Data, const uint8_t Length) ++{ ++ if (strncmp((char*)Data, "*IDN?", 5) == 0) ++ strcpy((char*)NextResponseBuffer, "LUFA TMC DEMO"); ++ ++ NextResponseLen = strlen((char*)NextResponseBuffer); ++} ++ ++uint8_t GetNextMessage(uint8_t* const Data) ++{ ++ strcpy((char*)NextResponseBuffer, "LUFA TMC DEMO"); ++ ++ NextResponseLen = strlen((char*)NextResponseBuffer); ++// --- ++ uint8_t DataLen = MIN(NextResponseLen, 64); ++ ++ strlcpy((char*)Data, (char*)NextResponseBuffer, DataLen); ++ ++ return DataLen; ++} ++ ++/** Function to manage TMC data transmission and reception to and from the host. */ ++void TMC_Task(void) ++{ ++ /* Device must be connected and configured for the task to run */ ++ if (USB_DeviceState != DEVICE_STATE_Configured) ++ return; ++ ++ TMC_MessageHeader_t MessageHeader; ++ uint8_t MessagePayload[128]; ++ ++ /* Try to read in a TMC message from the interface, process if one is available */ ++ if (ReadTMCHeader(&MessageHeader)) ++ { ++ /* Indicate busy */ ++ LEDs_SetAllLEDs(LEDMASK_USB_BUSY); ++ ++ switch (MessageHeader.MessageID) ++ { ++ case TMC_MESSAGEID_DEV_DEP_MSG_OUT: ++ LastTransferLength = 0; ++ while (Endpoint_Read_Stream_LE(MessagePayload, MIN(MessageHeader.TransferSize, sizeof(MessagePayload)), &LastTransferLength) == ++ ENDPOINT_RWSTREAM_IncompleteTransfer) ++ { ++ if (IsTMCBulkOUTReset) ++ break; ++ } ++ ++ Endpoint_ClearOUT(); ++ ++ ProcessSentMessage(MessagePayload, LastTransferLength); ++ break; ++ case TMC_MESSAGEID_DEV_DEP_MSG_IN: ++ Endpoint_ClearOUT(); ++ ++ MessageHeader.TransferSize = GetNextMessage(MessagePayload); ++ MessageHeader.MessageIDSpecific.DeviceOUT.LastMessageTransaction = true; ++ WriteTMCHeader(&MessageHeader); ++ ++ LastTransferLength = 0; ++ while (Endpoint_Write_Stream_LE(MessagePayload, MessageHeader.TransferSize, &LastTransferLength) == ++ ENDPOINT_RWSTREAM_IncompleteTransfer) ++ { ++ if (IsTMCBulkINReset) ++ break; ++ } ++ ++ Endpoint_ClearIN(); ++ break; ++ default: ++ Endpoint_StallTransaction(); ++ break; ++ } ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++ } ++ ++ /* All pending data has been processed - reset the data abort flags */ ++ IsTMCBulkINReset = false; ++ IsTMCBulkOUTReset = false; ++} ++ ++/** Attempts to read in the TMC message header from the TMC interface. ++ * ++ * \param[out] MessageHeader Pointer to a location where the read header (if any) should be stored ++ * ++ * \return Boolean \c true if a header was read, \c false otherwise ++ */ ++bool ReadTMCHeader(TMC_MessageHeader_t* const MessageHeader) ++{ ++ uint16_t BytesTransferred; ++ uint8_t ErrorCode; ++ ++ /* Select the Data Out endpoint */ ++ Endpoint_SelectEndpoint(TMC_OUT_EPADDR); ++ ++ /* Abort if no command has been sent from the host */ ++ if (!(Endpoint_IsOUTReceived())) ++ return false; ++ ++ /* Read in the header of the command from the host */ ++ BytesTransferred = 0; ++ while ((ErrorCode = Endpoint_Read_Stream_LE(MessageHeader, sizeof(TMC_MessageHeader_t), &BytesTransferred)) == ++ ENDPOINT_RWSTREAM_IncompleteTransfer) ++ { ++ if (IsTMCBulkOUTReset) ++ break; ++ } ++ ++ /* Store the new command tag value for later use */ ++ CurrentTransferTag = MessageHeader->Tag; ++ ++ /* Indicate if the command has been aborted or not */ ++ return (!(IsTMCBulkOUTReset) && (ErrorCode == ENDPOINT_RWSTREAM_NoError)); ++} ++ ++bool WriteTMCHeader(TMC_MessageHeader_t* const MessageHeader) ++{ ++ uint16_t BytesTransferred; ++ uint8_t ErrorCode; ++ ++ /* Set the message tag of the command header */ ++ MessageHeader->Tag = CurrentTransferTag; ++ MessageHeader->InverseTag = ~CurrentTransferTag; ++ ++ /* Select the Data In endpoint */ ++ Endpoint_SelectEndpoint(TMC_IN_EPADDR); ++ ++ /* Send the command header to the host */ ++ BytesTransferred = 0; ++ while ((ErrorCode = Endpoint_Write_Stream_LE(MessageHeader, sizeof(TMC_MessageHeader_t), &BytesTransferred)) == ++ ENDPOINT_RWSTREAM_IncompleteTransfer) ++ { ++ if (IsTMCBulkINReset) ++ break; ++ } ++ ++ /* Indicate if the command has been aborted or not */ ++ return (!(IsTMCBulkINReset) && (ErrorCode == ENDPOINT_RWSTREAM_NoError)); ++} ++ diff --cc lib/lufa/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.h index 000000000,000000000..50e865bed new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.h @@@ -1,0 -1,0 +1,150 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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. ++*/ ++ ++#ifndef _TESTANDMEASUREMENT_H_ ++#define _TESTANDMEASUREMENT_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ ++ #include "Descriptors.h" ++ ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Platform/Platform.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) ++ ++ /** LED mask for the library LED driver, to indicate that the USB interface is busy. */ ++ #define LEDMASK_USB_BUSY LEDS_LED2 ++ ++ #define Req_InitiateAbortBulkOut 0x01 ++ #define Req_CheckAbortBulkOutStatus 0x02 ++ #define Req_InitiateAbortBulkIn 0x03 ++ #define Req_CheckAbortBulkInStatus 0x04 ++ #define Req_InitiateClear 0x05 ++ #define Req_CheckClearStatus 0x06 ++ #define Req_GetCapabilities 0x07 ++ #define Req_IndicatorPulse 0x40 ++ ++ #define TMC_STATUS_SUCCESS 0x01 ++ #define TMC_STATUS_PENDING 0x02 ++ #define TMC_STATUS_FAILED 0x80 ++ #define TMC_STATUS_TRANSFER_NOT_IN_PROGRESS 0x81 ++ #define TMC_STATUS_SPLIT_NOT_IN_PROGRESS 0x82 ++ #define TMC_STATUS_SPLIT_IN_PROGRESS 0x83 ++ ++ #define TMC_MESSAGEID_DEV_DEP_MSG_OUT 0x01 ++ #define TMC_MESSAGEID_DEV_DEP_MSG_IN 0x02 ++ #define TMC_MESSAGEID_DEV_VENDOR_OUT 0x7E ++ #define TMC_MESSAGEID_DEV_VENDOR_IN 0x7F ++ ++ /* Type Defines */ ++ typedef struct ++ { ++ uint8_t Status; ++ uint8_t Reserved; ++ ++ uint16_t TMCVersion; ++ ++ struct ++ { ++ unsigned ListenOnly : 1; ++ unsigned TalkOnly : 1; ++ unsigned PulseIndicateSupported : 1; ++ unsigned Reserved : 5; ++ } Interface; ++ ++ struct ++ { ++ unsigned SupportsAbortINOnMatch : 1; ++ unsigned Reserved : 7; ++ } Device; ++ ++ uint8_t Reserved2[6]; ++ uint8_t Reserved3[12]; ++ } TMC_Capabilities_t; ++ ++ typedef struct ++ { ++ uint8_t LastMessageTransaction; ++ uint8_t TermChar; ++ uint8_t Reserved[2]; ++ } TMC_DevOUTMessageHeader_t; ++ ++ typedef struct ++ { ++ uint8_t LastMessageTransaction; ++ uint8_t Reserved[3]; ++ } TMC_DevINMessageHeader_t; ++ ++ typedef struct ++ { ++ uint8_t MessageID; ++ uint8_t Tag; ++ uint8_t InverseTag; ++ uint8_t Reserved; ++ uint32_t TransferSize; ++ ++ union ++ { ++ TMC_DevOUTMessageHeader_t DeviceOUT; ++ TMC_DevINMessageHeader_t DeviceIN; ++ uint32_t VendorSpecific; ++ } MessageIDSpecific; ++ } TMC_MessageHeader_t; ++ ++ /* Function Prototypes: */ ++ void SetupHardware(void); ++ void TMC_Task(void); ++ bool ReadTMCHeader(TMC_MessageHeader_t* const MessageHeader); ++ bool WriteTMCHeader(TMC_MessageHeader_t* const MessageHeader); ++ ++ void EVENT_USB_Device_Connect(void); ++ void EVENT_USB_Device_Disconnect(void); ++ void EVENT_USB_Device_ConfigurationChanged(void); ++ void EVENT_USB_Device_ControlRequest(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/Incomplete/TestAndMeasurement/makefile index 000000000,000000000..e0d89ccd7 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/Incomplete/TestAndMeasurement/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = TestAndMeasurement ++SRC = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Device/LowLevel/AudioInput/AudioInput.c index 000000000,000000000..2cf241466 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/AudioInput/AudioInput.c @@@ -1,0 -1,0 +1,259 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 Audio Input demo. This file contains the main tasks of the demo and ++ * is responsible for the initial application hardware configuration. ++ */ ++ ++#include "AudioInput.h" ++ ++/** Flag to indicate if the streaming audio alternative interface has been selected by the host. */ ++static bool StreamingAudioInterfaceSelected = false; ++ ++/** Current audio sampling frequency of the streaming audio endpoint. */ ++static uint32_t CurrentAudioSampleFrequency = 48000; ++ ++ ++/** 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); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#endif ++ ++ /* Hardware Initialization */ ++ LEDs_Init(); ++ Buttons_Init(); ++ ADC_Init(ADC_FREE_RUNNING | ADC_PRESCALE_32); ++ ADC_SetupChannel(MIC_IN_ADC_CHANNEL); ++ USB_Init(); ++ ++ /* Start the ADC conversion in free running mode */ ++ ADC_StartReading(ADC_REFERENCE_AVCC | ADC_RIGHT_ADJUSTED | ADC_GET_CHANNEL_MASK(MIC_IN_ADC_CHANNEL)); ++} ++ ++/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs, and ++ * configures the sample update and PWM timers. ++ */ ++void EVENT_USB_Device_Connect(void) ++{ ++ /* Indicate USB enumerating */ ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++ ++ /* Sample reload timer initialization */ ++ TIMSK0 = (1 << OCIE0A); ++ OCR0A = ((F_CPU / 8 / CurrentAudioSampleFrequency) - 1); ++ TCCR0A = (1 << WGM01); // CTC mode ++ TCCR0B = (1 << CS01); // Fcpu/8 speed ++} ++ ++/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via ++ * the status LEDs, disables the sample update and PWM output timers and stops the USB and Audio management tasks. ++ */ ++void EVENT_USB_Device_Disconnect(void) ++{ ++ /* Stop the sample reload timer */ ++ TCCR0B = 0; ++ ++ /* Indicate streaming audio interface not selected */ ++ StreamingAudioInterfaceSelected = false; ++ ++ /* Indicate USB not ready */ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration ++ * of the USB device after enumeration - the device endpoints are configured. ++ */ ++void EVENT_USB_Device_ConfigurationChanged(void) ++{ ++ bool ConfigSuccess = true; ++ ++ /* Setup Audio Stream Endpoint */ ++ ConfigSuccess &= Endpoint_ConfigureEndpoint(AUDIO_STREAM_EPADDR, EP_TYPE_ISOCHRONOUS, AUDIO_STREAM_EPSIZE, 2); ++ ++ /* Indicate endpoint configuration success or failure */ ++ LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); ++} ++ ++/** Event handler for the USB_ControlRequest event. This is used to catch and process control requests sent to ++ * the device from the USB host before passing along unhandled control requests to the library for processing ++ * internally. ++ */ ++void EVENT_USB_Device_ControlRequest(void) ++{ ++ /* Process General and Audio specific control requests */ ++ switch (USB_ControlRequest.bRequest) ++ { ++ case REQ_SetInterface: ++ /* Set Interface is not handled by the library, as its function is application-specific */ ++ if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_INTERFACE)) ++ { ++ Endpoint_ClearSETUP(); ++ Endpoint_ClearStatusStage(); ++ ++ /* Check if the host is enabling the audio interface (setting AlternateSetting to 1) */ ++ StreamingAudioInterfaceSelected = ((USB_ControlRequest.wValue) != 0); ++ } ++ ++ break; ++ case AUDIO_REQ_GetStatus: ++ /* Get Status request can be directed at either the interface or endpoint, neither is currently used ++ * according to the latest USB Audio 1.0 standard, but must be ACKed with no data when requested */ ++ if ((USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) || ++ (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_ENDPOINT))) ++ { ++ Endpoint_ClearSETUP(); ++ Endpoint_ClearStatusStage(); ++ } ++ ++ break; ++ case AUDIO_REQ_SetCurrent: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_ENDPOINT)) ++ { ++ /* Extract out the relevant request information to get the target Endpoint address and control being set */ ++ uint8_t EndpointAddress = (uint8_t)USB_ControlRequest.wIndex; ++ uint8_t EndpointControl = (USB_ControlRequest.wValue >> 8); ++ ++ /* Only handle SET CURRENT requests to the audio endpoint's sample frequency property */ ++ if ((EndpointAddress == AUDIO_STREAM_EPADDR) && (EndpointControl == AUDIO_EPCONTROL_SamplingFreq)) ++ { ++ uint8_t SampleRate[3]; ++ ++ Endpoint_ClearSETUP(); ++ Endpoint_Read_Control_Stream_LE(SampleRate, sizeof(SampleRate)); ++ Endpoint_ClearIN(); ++ ++ /* Set the new sampling frequency to the value given by the host */ ++ CurrentAudioSampleFrequency = (((uint32_t)SampleRate[2] << 16) | ((uint32_t)SampleRate[1] << 8) | (uint32_t)SampleRate[0]); ++ ++ /* Adjust sample reload timer to the new frequency */ ++ OCR0A = ((F_CPU / 8 / CurrentAudioSampleFrequency) - 1); ++ } ++ } ++ ++ break; ++ case AUDIO_REQ_GetCurrent: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_ENDPOINT)) ++ { ++ /* Extract out the relevant request information to get the target Endpoint address and control being retrieved */ ++ uint8_t EndpointAddress = (uint8_t)USB_ControlRequest.wIndex; ++ uint8_t EndpointControl = (USB_ControlRequest.wValue >> 8); ++ ++ /* Only handle GET CURRENT requests to the audio endpoint's sample frequency property */ ++ if ((EndpointAddress == AUDIO_STREAM_EPADDR) && (EndpointControl == AUDIO_EPCONTROL_SamplingFreq)) ++ { ++ uint8_t SampleRate[3]; ++ ++ /* Convert the sampling rate value into the 24-bit format the host expects for the property */ ++ SampleRate[2] = (CurrentAudioSampleFrequency >> 16); ++ SampleRate[1] = (CurrentAudioSampleFrequency >> 8); ++ SampleRate[0] = (CurrentAudioSampleFrequency & 0xFF); ++ ++ Endpoint_ClearSETUP(); ++ Endpoint_Write_Control_Stream_LE(SampleRate, sizeof(SampleRate)); ++ Endpoint_ClearOUT(); ++ } ++ } ++ ++ break; ++ } ++} ++ ++/** ISR to handle the reloading of the data endpoint with the next sample. */ ++ISR(TIMER0_COMPA_vect, ISR_BLOCK) ++{ ++ uint8_t PrevEndpoint = Endpoint_GetCurrentEndpoint(); ++ ++ /* Select the audio stream endpoint */ ++ Endpoint_SelectEndpoint(AUDIO_STREAM_EPADDR); ++ ++ /* Check if the current endpoint can be written to and that the audio interface is enabled */ ++ if (Endpoint_IsINReady() && StreamingAudioInterfaceSelected) ++ { ++ int16_t AudioSample; ++ ++ #if defined(USE_TEST_TONE) ++ static uint8_t SquareWaveSampleCount; ++ static int16_t CurrentWaveValue; ++ ++ /* In test tone mode, generate a square wave at 1/256 of the sample rate */ ++ if (SquareWaveSampleCount++ == 0xFF) ++ CurrentWaveValue ^= 0x8000; ++ ++ /* Only generate audio if the board button is being pressed */ ++ AudioSample = (Buttons_GetStatus() & BUTTONS_BUTTON1) ? CurrentWaveValue : 0; ++ #else ++ /* Audio sample is ADC value scaled to fit the entire range */ ++ AudioSample = ((SAMPLE_MAX_RANGE / ADC_MAX_RANGE) * ADC_GetResult()); ++ ++ #if defined(MICROPHONE_BIASED_TO_HALF_RAIL) ++ /* Microphone is biased to half rail voltage, subtract the bias from the sample value */ ++ AudioSample -= (SAMPLE_MAX_RANGE / 2); ++ #endif ++ #endif ++ ++ /* Write the sample to the buffer */ ++ Endpoint_Write_16_LE(AudioSample); ++ ++ /* Check to see if the bank is now full */ ++ if (!(Endpoint_IsReadWriteAllowed())) ++ { ++ /* Send the full packet to the host */ ++ Endpoint_ClearIN(); ++ } ++ } ++ ++ Endpoint_SelectEndpoint(PrevEndpoint); ++} ++ diff --cc lib/lufa/Demos/Device/LowLevel/AudioInput/AudioInput.h index 000000000,000000000..718df7cb7 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/AudioInput/AudioInput.h @@@ -1,0 -1,0 +1,82 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 AudioInput.c. ++ */ ++ ++#ifndef _AUDIO_INPUT_H_ ++#define _AUDIO_INPUT_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ ++ #include "Descriptors.h" ++ #include "Config/AppConfig.h" ++ ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/Board/Buttons.h> ++ #include <LUFA/Drivers/Peripheral/ADC.h> ++ #include <LUFA/Platform/Platform.h> ++ ++ /* Macros: */ ++ /** Maximum audio sample value for the microphone input. */ ++ #define SAMPLE_MAX_RANGE 0xFFFF ++ ++ /** Maximum ADC range for the microphone input. */ ++ #define ADC_MAX_RANGE 0x3FF ++ ++ /** 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 EVENT_USB_Device_Connect(void); ++ void EVENT_USB_Device_Disconnect(void); ++ void EVENT_USB_Device_ConfigurationChanged(void); ++ void EVENT_USB_Device_ControlRequest(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/AudioInput/AudioInput.txt index 000000000,000000000..9dc6c36b8 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/AudioInput/AudioInput.txt @@@ -1,0 -1,0 +1,87 @@@ ++/** \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 Audio Input Device Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * \li Series 6 USB AVRs (AT90USBxxx6) ++ * \li Series 4 USB AVRs (ATMEGAxxU4) ++ * ++ * \section Sec_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>Audio Class</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>Standard Audio Device</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF Audio 1.0 Class Specification \n ++ * USBIF Audio 1.0 Class Terminal Types Specification \n ++ * USBIF Audio 1.0 Data Formats Specification</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Audio demonstration application. This gives a simple reference ++ * application for implementing a USB Audio Input device using the ++ * basic USB Audio 1.0 drivers in all modern OSes (i.e. no special drivers ++ * required). ++ * ++ * On start-up the system will automatically enumerate and function as a ++ * USB microphone. By default, the demo will produce a square wave test tone ++ * when the board button is pressed. If USE_TEST_TONE is not defined in the ++ * project makefile, incoming audio from the ADC channel 1 will be sampled ++ * and sent to the host computer instead. ++ * ++ * When in microphone mode, connect a microphone to the ADC channel 2. ++ * ++ * Under Windows, if a driver request dialogue pops up, select the option ++ * to automatically install the appropriate drivers. ++ * ++ * \section Sec_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> ++ * <th><b>Define Name:</b></th> ++ * <th><b>Location:</b></th> ++ * <th><b>Description:</b></th> ++ * </tr> ++ * <tr> ++ * <td>USE_TEST_TONE</td> ++ * <td>AppConfig.h</td> ++ * <td>When defined, this alters the demo to produce a square wave test tone when the first board button is pressed ++ * instead of sampling the board microphone.</td> ++ * </tr> ++ * <tr> ++ * <td>MICROPHONE_BIASED_TO_HALF_RAIL</td> ++ * <td>AppConfig.h</td> ++ * <td>When defined, this alters the demo so that the half VCC bias of the microphone input is subtracted.</td> ++ * </tr> ++ * </table> ++ */ ++ diff --cc lib/lufa/Demos/Device/LowLevel/AudioInput/Config/AppConfig.h index 000000000,000000000..ff8ed270d new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/AudioInput/Config/AppConfig.h @@@ -1,0 -1,0 +1,51 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief Application Configuration Header File ++ * ++ * This is a header file which is be used to configure some of ++ * the application's compile time options, as an alternative to ++ * specifying the compile time constants supplied through a ++ * makefile or build system. ++ * ++ * For information on what each token does, refer to the ++ * \ref Sec_Options section of the application documentation. ++ */ ++ ++#ifndef _APP_CONFIG_H_ ++#define _APP_CONFIG_H_ ++ ++ #define MIC_IN_ADC_CHANNEL 2 ++ ++ #define MICROPHONE_BIASED_TO_HALF_RAIL ++ #define USE_TEST_TONE ++ ++#endif diff --cc lib/lufa/Demos/Device/LowLevel/AudioInput/Config/LUFAConfig.h index 000000000,000000000..6048c1d80 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/AudioInput/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++ #define USB_DEVICE_ONLY ++// #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Device/LowLevel/AudioInput/Descriptors.c index 000000000,000000000..55e09244c new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/AudioInput/Descriptors.c @@@ -1,0 -1,0 +1,312 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special ++ * computer-readable structures which the host requests upon device enumeration, to determine ++ * the device's capabilities and functions. ++ */ ++ ++#include "Descriptors.h" ++ ++/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall ++ * device characteristics, including the supported USB version, control endpoint size and the ++ * number of device configurations. The descriptor is read out by the USB host when the enumeration ++ * process begins. ++ */ ++const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = ++{ ++ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, ++ ++ .USBSpecification = VERSION_BCD(1,1,0), ++ .Class = USB_CSCP_NoDeviceClass, ++ .SubClass = USB_CSCP_NoDeviceSubclass, ++ .Protocol = USB_CSCP_NoDeviceProtocol, ++ ++ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, ++ ++ .VendorID = 0x03EB, ++ .ProductID = 0x2047, ++ .ReleaseNumber = VERSION_BCD(0,0,2), ++ ++ .ManufacturerStrIndex = STRING_ID_Manufacturer, ++ .ProductStrIndex = STRING_ID_Product, ++ .SerialNumStrIndex = NO_DESCRIPTOR, ++ ++ .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. ++ */ ++const 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 = 2, ++ ++ .ConfigurationNumber = 1, ++ .ConfigurationStrIndex = NO_DESCRIPTOR, ++ ++ .ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED), ++ ++ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) ++ }, ++ ++ .Audio_ControlInterface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_AudioControl, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 0, ++ ++ .Class = AUDIO_CSCP_AudioClass, ++ .SubClass = AUDIO_CSCP_ControlSubclass, ++ .Protocol = AUDIO_CSCP_ControlProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .Audio_ControlInterface_SPC = ++ { ++ .Header = {.Size = sizeof(USB_Audio_Descriptor_Interface_AC_t), .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_Header, ++ ++ .ACSpecification = VERSION_BCD(1,0,0), ++ .TotalLength = (sizeof(USB_Audio_Descriptor_Interface_AC_t) + ++ sizeof(USB_Audio_Descriptor_InputTerminal_t) + ++ sizeof(USB_Audio_Descriptor_OutputTerminal_t)), ++ ++ .InCollection = 1, ++ .InterfaceNumber = INTERFACE_ID_AudioStream, ++ }, ++ ++ .Audio_InputTerminal = ++ { ++ .Header = {.Size = sizeof(USB_Audio_Descriptor_InputTerminal_t), .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_InputTerminal, ++ ++ .TerminalID = 0x01, ++ .TerminalType = AUDIO_TERMINAL_IN_MIC, ++ .AssociatedOutputTerminal = 0x00, ++ ++ .TotalChannels = 1, ++ .ChannelConfig = 0, ++ ++ .ChannelStrIndex = NO_DESCRIPTOR, ++ .TerminalStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .Audio_OutputTerminal = ++ { ++ .Header = {.Size = sizeof(USB_Audio_Descriptor_OutputTerminal_t), .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_OutputTerminal, ++ ++ .TerminalID = 0x02, ++ .TerminalType = AUDIO_TERMINAL_STREAMING, ++ .AssociatedInputTerminal = 0x00, ++ ++ .SourceID = 0x01, ++ ++ .TerminalStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .Audio_StreamInterface_Alt0 = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_AudioStream, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 0, ++ ++ .Class = AUDIO_CSCP_AudioClass, ++ .SubClass = AUDIO_CSCP_AudioStreamingSubclass, ++ .Protocol = AUDIO_CSCP_StreamingProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .Audio_StreamInterface_Alt1 = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_AudioStream, ++ .AlternateSetting = 1, ++ ++ .TotalEndpoints = 1, ++ ++ .Class = AUDIO_CSCP_AudioClass, ++ .SubClass = AUDIO_CSCP_AudioStreamingSubclass, ++ .Protocol = AUDIO_CSCP_StreamingProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .Audio_StreamInterface_SPC = ++ { ++ .Header = {.Size = sizeof(USB_Audio_Descriptor_Interface_AS_t), .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_General, ++ ++ .TerminalLink = 0x02, ++ ++ .FrameDelay = 1, ++ .AudioFormat = 0x0001 ++ }, ++ ++ .Audio_AudioFormat = ++ { ++ .Header = {.Size = sizeof(USB_Audio_Descriptor_Format_t) + ++ sizeof(ConfigurationDescriptor.Audio_AudioFormatSampleRates), ++ .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_FormatType, ++ ++ .FormatType = 0x01, ++ .Channels = 0x01, ++ ++ .SubFrameSize = 0x02, ++ .BitResolution = 16, ++ ++ .TotalDiscreteSampleRates = (sizeof(ConfigurationDescriptor.Audio_AudioFormatSampleRates) / sizeof(USB_Audio_SampleFreq_t)), ++ }, ++ ++ .Audio_AudioFormatSampleRates = ++ { ++ AUDIO_SAMPLE_FREQ(8000), ++ AUDIO_SAMPLE_FREQ(11025), ++ AUDIO_SAMPLE_FREQ(22050), ++ AUDIO_SAMPLE_FREQ(44100), ++ AUDIO_SAMPLE_FREQ(48000), ++ }, ++ ++ .Audio_StreamEndpoint = ++ { ++ .Endpoint = ++ { ++ .Header = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Std_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = AUDIO_STREAM_EPADDR, ++ .Attributes = (EP_TYPE_ISOCHRONOUS | ENDPOINT_ATTR_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = AUDIO_STREAM_EPSIZE, ++ .PollingIntervalMS = 0x01 ++ }, ++ ++ .Refresh = 0, ++ .SyncEndpointNumber = 0 ++ }, ++ ++ .Audio_StreamEndpoint_SPC = ++ { ++ .Header = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Spc_t), .Type = DTYPE_CSEndpoint}, ++ .Subtype = AUDIO_DSUBTYPE_CSEndpoint_General, ++ ++ .Attributes = (AUDIO_EP_ACCEPTS_SMALL_PACKETS | AUDIO_EP_SAMPLE_FREQ_CONTROL), ++ ++ .LockDelayUnits = 0x00, ++ .LockDelay = 0x0000 ++ } ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_String_t PROGMEM LanguageString = USB_STRING_DESCRIPTOR_ARRAY(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"LUFA Audio In 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 uint16_t wIndex, ++ const void** const DescriptorAddress) ++{ ++ const uint8_t DescriptorType = (wValue >> 8); ++ const uint8_t DescriptorNumber = (wValue & 0xFF); ++ ++ const void* Address = NULL; ++ uint16_t Size = NO_DESCRIPTOR; ++ ++ switch (DescriptorType) ++ { ++ case DTYPE_Device: ++ Address = &DeviceDescriptor; ++ Size = sizeof(USB_Descriptor_Device_t); ++ break; ++ case DTYPE_Configuration: ++ Address = &ConfigurationDescriptor; ++ Size = sizeof(USB_Descriptor_Configuration_t); ++ break; ++ case DTYPE_String: ++ switch (DescriptorNumber) ++ { ++ case STRING_ID_Language: ++ Address = &LanguageString; ++ Size = pgm_read_byte(&LanguageString.Header.Size); ++ break; ++ case STRING_ID_Manufacturer: ++ Address = &ManufacturerString; ++ Size = pgm_read_byte(&ManufacturerString.Header.Size); ++ break; ++ case STRING_ID_Product: ++ Address = &ProductString; ++ Size = pgm_read_byte(&ProductString.Header.Size); ++ break; ++ } ++ ++ break; ++ } ++ ++ *DescriptorAddress = Address; ++ return Size; ++} ++ diff --cc lib/lufa/Demos/Device/LowLevel/AudioInput/Descriptors.h index 000000000,000000000..cf832efb9 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/AudioInput/Descriptors.h @@@ -1,0 -1,0 +1,106 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * Header file for Descriptors.c. ++ */ ++ ++#ifndef _DESCRIPTORS_H_ ++#define _DESCRIPTORS_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include <avr/pgmspace.h> ++ ++ #include "Config/AppConfig.h" ++ ++ /* Macros: */ ++ /** Endpoint address of the Audio isochronous streaming data IN endpoint. */ ++ #define AUDIO_STREAM_EPADDR (ENDPOINT_DIR_IN | 1) ++ ++ /** Endpoint size in bytes of the Audio isochronous streaming data endpoint. */ ++ #define AUDIO_STREAM_EPSIZE 256 ++ ++ /* 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; ++ ++ // Audio Control Interface ++ USB_Descriptor_Interface_t Audio_ControlInterface; ++ USB_Audio_Descriptor_Interface_AC_t Audio_ControlInterface_SPC; ++ USB_Audio_Descriptor_InputTerminal_t Audio_InputTerminal; ++ USB_Audio_Descriptor_OutputTerminal_t Audio_OutputTerminal; ++ ++ // Audio Streaming Interface ++ USB_Descriptor_Interface_t Audio_StreamInterface_Alt0; ++ USB_Descriptor_Interface_t Audio_StreamInterface_Alt1; ++ USB_Audio_Descriptor_Interface_AS_t Audio_StreamInterface_SPC; ++ USB_Audio_Descriptor_Format_t Audio_AudioFormat; ++ USB_Audio_SampleFreq_t Audio_AudioFormatSampleRates[5]; ++ USB_Audio_Descriptor_StreamEndpoint_Std_t Audio_StreamEndpoint; ++ USB_Audio_Descriptor_StreamEndpoint_Spc_t Audio_StreamEndpoint_SPC; ++ } USB_Descriptor_Configuration_t; ++ ++ /** Enum for the device interface descriptor IDs within the device. Each interface descriptor ++ * should have a unique ID index associated with it, which can be used to refer to the ++ * interface from other descriptors. ++ */ ++ enum InterfaceDescriptors_t ++ { ++ INTERFACE_ID_AudioControl = 0, /**< Audio control interface descriptor ID */ ++ INTERFACE_ID_AudioStream = 1, /**< Audio stream interface descriptor ID */ ++ }; ++ ++ /** Enum for the device string descriptor IDs within the device. Each string descriptor should ++ * have a unique ID index associated with it, which can be used to refer to the string from ++ * other descriptors. ++ */ ++ enum StringDescriptors_t ++ { ++ STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */ ++ STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */ ++ STRING_ID_Product = 2, /**< Product string ID */ ++ }; ++ ++ /* Function Prototypes: */ ++ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ++ const uint16_t wIndex, ++ const void** const DescriptorAddress) ++ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/AudioInput/asf.xml index 000000000,000000000..dab549a75 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/AudioInput/asf.xml @@@ -1,0 -1,0 +1,52 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Audio Input Device Demo (Low Level APIs)" id="lufa.demos.device.lowlevel.audio_input.example.avr8"> ++ <require idref="lufa.demos.device.lowlevel.audio_input"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.device.lowlevel.audio_input" caption="Audio Input Device Demo (Low Level APIs)"> ++ <info type="description" value="summary"> ++ Audio 1.0 Input device demo, implementing a basic USB microphone. This demo uses the Low Level LUFA APIs to manually implement a USB Class for demonstration purposes without using the simpler in-built LUFA Class Driver APIs. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Low Level APIs"/> ++ <keyword value="USB Device"/> ++ <keyword value="Audio Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="AudioInput.txt"/> ++ ++ <build type="c-source" value="AudioInput.c"/> ++ <build type="c-source" value="Descriptors.c"/> ++ <build type="header-file" value="AudioInput.h"/> ++ <build type="header-file" value="Descriptors.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="module-config" subtype="required-header-file" value="AppConfig.h"/> ++ <build type="header-file" value="Config/AppConfig.h"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.peripheral.adc"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ <require idref="lufa.drivers.board.buttons"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Device/LowLevel/AudioInput/doxyfile index 000000000,000000000..d52d22cdc new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/AudioInput/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Audio Input 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Device/LowLevel/AudioInput/makefile index 000000000,000000000..694e7fb1a new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/AudioInput/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = AudioInput ++SRC = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Device/LowLevel/AudioOutput/AudioOutput.c index 000000000,000000000..7966ba6ea new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/AudioOutput/AudioOutput.c @@@ -1,0 -1,0 +1,293 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 AudioOutput demo. This file contains the main tasks of the demo and ++ * is responsible for the initial application hardware configuration. ++ */ ++ ++#include "AudioOutput.h" ++ ++/** Flag to indicate if the streaming audio alternative interface has been selected by the host. */ ++static bool StreamingAudioInterfaceSelected = false; ++ ++/** Current audio sampling frequency of the streaming audio endpoint. */ ++static uint32_t CurrentAudioSampleFrequency = 48000; ++ ++ ++/** 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); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#endif ++ ++ /* Hardware Initialization */ ++ LEDs_Init(); ++ USB_Init(); ++} ++ ++/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs, and ++ * configures the sample update and PWM timers. ++ */ ++void EVENT_USB_Device_Connect(void) ++{ ++ /* Indicate USB enumerating */ ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++ ++ /* Sample reload timer initialization */ ++ TIMSK0 = (1 << OCIE0A); ++ OCR0A = ((F_CPU / 8 / CurrentAudioSampleFrequency) - 1); ++ TCCR0A = (1 << WGM01); // CTC mode ++ TCCR0B = (1 << CS01); // Fcpu/8 speed ++ ++ #if defined(AUDIO_OUT_MONO) ++ /* Set speaker as output */ ++ DDRC |= (1 << 6); ++ #elif defined(AUDIO_OUT_STEREO) ++ /* Set speakers as outputs */ ++ DDRC |= ((1 << 6) | (1 << 5)); ++ #elif defined(AUDIO_OUT_PORTC) ++ /* Set PORTC as outputs */ ++ DDRC |= 0xFF; ++ #endif ++ ++ #if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO)) ++ /* PWM speaker timer initialization */ ++ TCCR3A = ((1 << WGM30) | (1 << COM3A1) | (1 << COM3A0) ++ | (1 << COM3B1) | (1 << COM3B0)); // Set on match, clear on TOP ++ TCCR3B = ((1 << WGM32) | (1 << CS30)); // Fast 8-Bit PWM, F_CPU speed ++ #endif ++} ++ ++/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via ++ * the status LEDs, disables the sample update and PWM output timers and stops the USB and Audio management tasks. ++ */ ++void EVENT_USB_Device_Disconnect(void) ++{ ++ /* Stop the timers */ ++ TCCR0B = 0; ++ #if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO)) ++ TCCR3B = 0; ++ #endif ++ ++ #if defined(AUDIO_OUT_MONO) ++ /* Set speaker as input to reduce current draw */ ++ DDRC &= ~(1 << 6); ++ #elif defined(AUDIO_OUT_STEREO) ++ /* Set speakers as inputs to reduce current draw */ ++ DDRC &= ~((1 << 6) | (1 << 5)); ++ #elif defined(AUDIO_OUT_PORTC) ++ /* Set PORTC low */ ++ PORTC = 0x00; ++ #endif ++ ++ /* Indicate streaming audio interface not selected */ ++ StreamingAudioInterfaceSelected = false; ++ ++ /* Indicate USB not ready */ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration ++ * of the USB device after enumeration - the device endpoints are configured. ++ */ ++void EVENT_USB_Device_ConfigurationChanged(void) ++{ ++ bool ConfigSuccess = true; ++ ++ /* Setup Audio Stream Endpoint */ ++ ConfigSuccess &= Endpoint_ConfigureEndpoint(AUDIO_STREAM_EPADDR, EP_TYPE_ISOCHRONOUS, AUDIO_STREAM_EPSIZE, 2); ++ ++ /* Indicate endpoint configuration success or failure */ ++ LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); ++} ++ ++/** Event handler for the USB_ControlRequest event. This is used to catch and process control requests sent to ++ * the device from the USB host before passing along unhandled control requests to the library for processing ++ * internally. ++ */ ++void EVENT_USB_Device_ControlRequest(void) ++{ ++ /* Process General and Audio specific control requests */ ++ switch (USB_ControlRequest.bRequest) ++ { ++ case REQ_SetInterface: ++ /* Set Interface is not handled by the library, as its function is application-specific */ ++ if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_INTERFACE)) ++ { ++ Endpoint_ClearSETUP(); ++ Endpoint_ClearStatusStage(); ++ ++ /* Check if the host is enabling the audio interface (setting AlternateSetting to 1) */ ++ StreamingAudioInterfaceSelected = ((USB_ControlRequest.wValue) != 0); ++ } ++ ++ break; ++ case AUDIO_REQ_GetStatus: ++ /* Get Status request can be directed at either the interface or endpoint, neither is currently used ++ * according to the latest USB Audio 1.0 standard, but must be ACKed with no data when requested */ ++ if ((USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) || ++ (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_ENDPOINT))) ++ { ++ Endpoint_ClearSETUP(); ++ Endpoint_ClearStatusStage(); ++ } ++ ++ break; ++ case AUDIO_REQ_SetCurrent: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_ENDPOINT)) ++ { ++ /* Extract out the relevant request information to get the target Endpoint address and control being set */ ++ uint8_t EndpointAddress = (uint8_t)USB_ControlRequest.wIndex; ++ uint8_t EndpointControl = (USB_ControlRequest.wValue >> 8); ++ ++ /* Only handle SET CURRENT requests to the audio endpoint's sample frequency property */ ++ if ((EndpointAddress == AUDIO_STREAM_EPADDR) && (EndpointControl == AUDIO_EPCONTROL_SamplingFreq)) ++ { ++ uint8_t SampleRate[3]; ++ ++ Endpoint_ClearSETUP(); ++ Endpoint_Read_Control_Stream_LE(SampleRate, sizeof(SampleRate)); ++ Endpoint_ClearIN(); ++ ++ /* Set the new sampling frequency to the value given by the host */ ++ CurrentAudioSampleFrequency = (((uint32_t)SampleRate[2] << 16) | ((uint32_t)SampleRate[1] << 8) | (uint32_t)SampleRate[0]); ++ ++ /* Adjust sample reload timer to the new frequency */ ++ OCR0A = ((F_CPU / 8 / CurrentAudioSampleFrequency) - 1); ++ } ++ } ++ ++ break; ++ case AUDIO_REQ_GetCurrent: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_ENDPOINT)) ++ { ++ /* Extract out the relevant request information to get the target Endpoint address and control being retrieved */ ++ uint8_t EndpointAddress = (uint8_t)USB_ControlRequest.wIndex; ++ uint8_t EndpointControl = (USB_ControlRequest.wValue >> 8); ++ ++ /* Only handle GET CURRENT requests to the audio endpoint's sample frequency property */ ++ if ((EndpointAddress == AUDIO_STREAM_EPADDR) && (EndpointControl == AUDIO_EPCONTROL_SamplingFreq)) ++ { ++ uint8_t SampleRate[3]; ++ ++ /* Convert the sampling rate value into the 24-bit format the host expects for the property */ ++ SampleRate[2] = (CurrentAudioSampleFrequency >> 16); ++ SampleRate[1] = (CurrentAudioSampleFrequency >> 8); ++ SampleRate[0] = (CurrentAudioSampleFrequency & 0xFF); ++ ++ Endpoint_ClearSETUP(); ++ Endpoint_Write_Control_Stream_LE(SampleRate, sizeof(SampleRate)); ++ Endpoint_ClearOUT(); ++ } ++ } ++ ++ break; ++ } ++} ++ ++/** ISR to handle the reloading of the PWM timer with the next sample. */ ++ISR(TIMER0_COMPA_vect, ISR_BLOCK) ++{ ++ uint8_t PrevEndpoint = Endpoint_GetCurrentEndpoint(); ++ ++ /* Select the audio stream endpoint */ ++ Endpoint_SelectEndpoint(AUDIO_STREAM_EPADDR); ++ ++ /* Check if the current endpoint can be read from (contains a packet) and the host is sending data */ ++ if (Endpoint_IsOUTReceived() && StreamingAudioInterfaceSelected) ++ { ++ /* Retrieve the signed 16-bit left and right audio samples, convert to 8-bit */ ++ int8_t LeftSample_8Bit = ((int16_t)Endpoint_Read_16_LE() >> 8); ++ int8_t RightSample_8Bit = ((int16_t)Endpoint_Read_16_LE() >> 8); ++ ++ /* Mix the two channels together to produce a mono, 8-bit sample */ ++ int8_t MixedSample_8Bit = (((int16_t)LeftSample_8Bit + (int16_t)RightSample_8Bit) >> 1); ++ ++ /* Check to see if the bank is now empty */ ++ if (!(Endpoint_IsReadWriteAllowed())) ++ { ++ /* Acknowledge the packet, clear the bank ready for the next packet */ ++ Endpoint_ClearOUT(); ++ } ++ ++ #if defined(AUDIO_OUT_MONO) ++ /* Load the sample into the PWM timer channel */ ++ OCR3A = (MixedSample_8Bit ^ (1 << 7)); ++ #elif defined(AUDIO_OUT_STEREO) ++ /* Load the dual 8-bit samples into the PWM timer channels */ ++ OCR3A = (LeftSample_8Bit ^ (1 << 7)); ++ OCR3B = (RightSample_8Bit ^ (1 << 7)); ++ #elif defined(AUDIO_OUT_PORTC) ++ /* Load the 8-bit mixed sample into PORTC */ ++ PORTC = MixedSample_8Bit; ++ #endif ++ ++ uint8_t LEDMask = LEDS_NO_LEDS; ++ ++ /* Turn on LEDs as the sample amplitude increases */ ++ if (MixedSample_8Bit > 16) ++ LEDMask = (LEDS_LED1 | LEDS_LED2 | LEDS_LED3 | LEDS_LED4); ++ else if (MixedSample_8Bit > 8) ++ LEDMask = (LEDS_LED1 | LEDS_LED2 | LEDS_LED3); ++ else if (MixedSample_8Bit > 4) ++ LEDMask = (LEDS_LED1 | LEDS_LED2); ++ else if (MixedSample_8Bit > 2) ++ LEDMask = (LEDS_LED1); ++ ++ LEDs_SetAllLEDs(LEDMask); ++ } ++ ++ Endpoint_SelectEndpoint(PrevEndpoint); ++} ++ diff --cc lib/lufa/Demos/Device/LowLevel/AudioOutput/AudioOutput.h index 000000000,000000000..15c8c458d new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/AudioOutput/AudioOutput.h @@@ -1,0 -1,0 +1,74 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 AudioOutput.c. ++ */ ++ ++#ifndef _AUDIO_OUTPUT_H_ ++#define _AUDIO_OUTPUT_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ ++ #include "Descriptors.h" ++ #include "Config/AppConfig.h" ++ ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Platform/Platform.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 EVENT_USB_Device_Connect(void); ++ void EVENT_USB_Device_Disconnect(void); ++ void EVENT_USB_Device_ConfigurationChanged(void); ++ void EVENT_USB_Device_ControlRequest(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/AudioOutput/AudioOutput.txt index 000000000,000000000..8f0c7d656 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/AudioOutput/AudioOutput.txt @@@ -1,0 -1,0 +1,92 @@@ ++/** \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 Audio Output Device Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * \li Series 6 USB AVRs (AT90USBxxx6) ++ * \li Series 4 USB AVRs (ATMEGAxxU4) ++ * ++ * \section Sec_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>Audio Class</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>Standard Audio Device</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF Audio 1.0 Class Specification \n ++ * USBIF Audio 1.0 Class Terminal Types Specification \n ++ * USBIF Audio 1.0 Data Formats Specification</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Audio demonstration application. This gives a simple reference ++ * application for implementing a USB Audio Output device using the ++ * basic USB Audio 1.0 drivers in all modern OSes (i.e. no special drivers ++ * required). ++ * ++ * On start-up the system will automatically enumerate and function ++ * as a USB speaker. Outgoing audio will output in 8-bit PWM onto ++ * the timer 3 output compare channel A for AUDIO_OUT_MONO mode, on ++ * timer 3 channels A and B for AUDIO_OUT_STEREO and on PORTC as a signed ++ * mono sample for AUDIO_OUT_PORTC. Audio output will also be indicated on ++ * the board LEDs in all modes. Decouple audio outputs with a capacitor and ++ * attach to a speaker to hear the audio. ++ * ++ * Under Windows, if a driver request dialogue pops up, select the option ++ * to automatically install the appropriate drivers. ++ * ++ * \section Sec_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> ++ * <th><b>Define Name:</b></th> ++ * <th><b>Location:</b></th> ++ * <th><b>Description:</b></th> ++ * </tr> ++ * <tr> ++ * <td>AUDIO_OUT_STEREO</td> ++ * <td>AppConfig.h</td> ++ * <td>When defined, this outputs the audio samples in stereo to the timer output pins of the microcontroller.</td> ++ * </tr> ++ * <tr> ++ * <td>AUDIO_OUT_MONO</td> ++ * <td>AppConfig.h</td> ++ * <td>When defined, this outputs the audio samples in mono to the timer output pin of the microcontroller.</td> ++ * </tr> ++ * <tr> ++ * <td>AUDIO_OUT_PORTC</td> ++ * <td>AppConfig.h</td> ++ * <td>When defined, this outputs the audio samples in mono to port C of the microcontroller, for connection to an ++ * external DAC.</td> ++ * </tr> ++ * </table> ++ */ ++ diff --cc lib/lufa/Demos/Device/LowLevel/AudioOutput/Config/AppConfig.h index 000000000,000000000..e93cfc813 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/AudioOutput/Config/AppConfig.h @@@ -1,0 -1,0 +1,50 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief Application Configuration Header File ++ * ++ * This is a header file which is be used to configure some of ++ * the application's compile time options, as an alternative to ++ * specifying the compile time constants supplied through a ++ * makefile or build system. ++ * ++ * For information on what each token does, refer to the ++ * \ref Sec_Options section of the application documentation. ++ */ ++ ++#ifndef _APP_CONFIG_H_ ++#define _APP_CONFIG_H_ ++ ++ #define AUDIO_OUT_STEREO ++// #define AUDIO_OUT_MONO ++// #define AUDIO_OUT_PORTC ++ ++#endif diff --cc lib/lufa/Demos/Device/LowLevel/AudioOutput/Config/LUFAConfig.h index 000000000,000000000..6048c1d80 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/AudioOutput/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++ #define USB_DEVICE_ONLY ++// #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Device/LowLevel/AudioOutput/Descriptors.c index 000000000,000000000..64be54bf0 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/AudioOutput/Descriptors.c @@@ -1,0 -1,0 +1,312 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special ++ * computer-readable structures which the host requests upon device enumeration, to determine ++ * the device's capabilities and functions. ++ */ ++ ++#include "Descriptors.h" ++ ++/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall ++ * device characteristics, including the supported USB version, control endpoint size and the ++ * number of device configurations. The descriptor is read out by the USB host when the enumeration ++ * process begins. ++ */ ++const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = ++{ ++ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, ++ ++ .USBSpecification = VERSION_BCD(1,1,0), ++ .Class = USB_CSCP_NoDeviceClass, ++ .SubClass = USB_CSCP_NoDeviceSubclass, ++ .Protocol = USB_CSCP_NoDeviceProtocol, ++ ++ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, ++ ++ .VendorID = 0x03EB, ++ .ProductID = 0x2046, ++ .ReleaseNumber = VERSION_BCD(0,0,2), ++ ++ .ManufacturerStrIndex = STRING_ID_Manufacturer, ++ .ProductStrIndex = STRING_ID_Product, ++ .SerialNumStrIndex = NO_DESCRIPTOR, ++ ++ .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. ++ */ ++const 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 = 2, ++ ++ .ConfigurationNumber = 1, ++ .ConfigurationStrIndex = NO_DESCRIPTOR, ++ ++ .ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED), ++ ++ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) ++ }, ++ ++ .Audio_ControlInterface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_AudioControl, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 0, ++ ++ .Class = AUDIO_CSCP_AudioClass, ++ .SubClass = AUDIO_CSCP_ControlSubclass, ++ .Protocol = AUDIO_CSCP_ControlProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .Audio_ControlInterface_SPC = ++ { ++ .Header = {.Size = sizeof(USB_Audio_Descriptor_Interface_AC_t), .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_Header, ++ ++ .ACSpecification = VERSION_BCD(1,0,0), ++ .TotalLength = (sizeof(USB_Audio_Descriptor_Interface_AC_t) + ++ sizeof(USB_Audio_Descriptor_InputTerminal_t) + ++ sizeof(USB_Audio_Descriptor_OutputTerminal_t)), ++ ++ .InCollection = 1, ++ .InterfaceNumber = INTERFACE_ID_AudioStream, ++ }, ++ ++ .Audio_InputTerminal = ++ { ++ .Header = {.Size = sizeof(USB_Audio_Descriptor_InputTerminal_t), .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_InputTerminal, ++ ++ .TerminalID = 0x01, ++ .TerminalType = AUDIO_TERMINAL_STREAMING, ++ .AssociatedOutputTerminal = 0x00, ++ ++ .TotalChannels = 2, ++ .ChannelConfig = (AUDIO_CHANNEL_LEFT_FRONT | AUDIO_CHANNEL_RIGHT_FRONT), ++ ++ .ChannelStrIndex = NO_DESCRIPTOR, ++ .TerminalStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .Audio_OutputTerminal = ++ { ++ .Header = {.Size = sizeof(USB_Audio_Descriptor_OutputTerminal_t), .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_OutputTerminal, ++ ++ .TerminalID = 0x02, ++ .TerminalType = AUDIO_TERMINAL_OUT_SPEAKER, ++ .AssociatedInputTerminal = 0x00, ++ ++ .SourceID = 0x01, ++ ++ .TerminalStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .Audio_StreamInterface_Alt0 = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_AudioStream, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 0, ++ ++ .Class = AUDIO_CSCP_AudioClass, ++ .SubClass = AUDIO_CSCP_AudioStreamingSubclass, ++ .Protocol = AUDIO_CSCP_StreamingProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .Audio_StreamInterface_Alt1 = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_AudioStream, ++ .AlternateSetting = 1, ++ ++ .TotalEndpoints = 1, ++ ++ .Class = AUDIO_CSCP_AudioClass, ++ .SubClass = AUDIO_CSCP_AudioStreamingSubclass, ++ .Protocol = AUDIO_CSCP_StreamingProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .Audio_StreamInterface_SPC = ++ { ++ .Header = {.Size = sizeof(USB_Audio_Descriptor_Interface_AS_t), .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_General, ++ ++ .TerminalLink = 0x01, ++ ++ .FrameDelay = 1, ++ .AudioFormat = 0x0001 ++ }, ++ ++ .Audio_AudioFormat = ++ { ++ .Header = {.Size = sizeof(USB_Audio_Descriptor_Format_t) + ++ sizeof(ConfigurationDescriptor.Audio_AudioFormatSampleRates), ++ .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_FormatType, ++ ++ .FormatType = 0x01, ++ .Channels = 0x02, ++ ++ .SubFrameSize = 0x02, ++ .BitResolution = 16, ++ ++ .TotalDiscreteSampleRates = (sizeof(ConfigurationDescriptor.Audio_AudioFormatSampleRates) / sizeof(USB_Audio_SampleFreq_t)), ++ }, ++ ++ .Audio_AudioFormatSampleRates = ++ { ++ AUDIO_SAMPLE_FREQ(8000), ++ AUDIO_SAMPLE_FREQ(11025), ++ AUDIO_SAMPLE_FREQ(22050), ++ AUDIO_SAMPLE_FREQ(44100), ++ AUDIO_SAMPLE_FREQ(48000), ++ }, ++ ++ .Audio_StreamEndpoint = ++ { ++ .Endpoint = ++ { ++ .Header = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Std_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = AUDIO_STREAM_EPADDR, ++ .Attributes = (EP_TYPE_ISOCHRONOUS | ENDPOINT_ATTR_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = AUDIO_STREAM_EPSIZE, ++ .PollingIntervalMS = 0x01 ++ }, ++ ++ .Refresh = 0, ++ .SyncEndpointNumber = 0 ++ }, ++ ++ .Audio_StreamEndpoint_SPC = ++ { ++ .Header = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Spc_t), .Type = DTYPE_CSEndpoint}, ++ .Subtype = AUDIO_DSUBTYPE_CSEndpoint_General, ++ ++ .Attributes = (AUDIO_EP_ACCEPTS_SMALL_PACKETS | AUDIO_EP_SAMPLE_FREQ_CONTROL), ++ ++ .LockDelayUnits = 0x00, ++ .LockDelay = 0x0000 ++ } ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_String_t PROGMEM LanguageString = USB_STRING_DESCRIPTOR_ARRAY(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"LUFA Audio Out 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 uint16_t wIndex, ++ const void** const DescriptorAddress) ++{ ++ const uint8_t DescriptorType = (wValue >> 8); ++ const uint8_t DescriptorNumber = (wValue & 0xFF); ++ ++ const void* Address = NULL; ++ uint16_t Size = NO_DESCRIPTOR; ++ ++ switch (DescriptorType) ++ { ++ case DTYPE_Device: ++ Address = &DeviceDescriptor; ++ Size = sizeof(USB_Descriptor_Device_t); ++ break; ++ case DTYPE_Configuration: ++ Address = &ConfigurationDescriptor; ++ Size = sizeof(USB_Descriptor_Configuration_t); ++ break; ++ case DTYPE_String: ++ switch (DescriptorNumber) ++ { ++ case STRING_ID_Language: ++ Address = &LanguageString; ++ Size = pgm_read_byte(&LanguageString.Header.Size); ++ break; ++ case STRING_ID_Manufacturer: ++ Address = &ManufacturerString; ++ Size = pgm_read_byte(&ManufacturerString.Header.Size); ++ break; ++ case STRING_ID_Product: ++ Address = &ProductString; ++ Size = pgm_read_byte(&ProductString.Header.Size); ++ break; ++ } ++ ++ break; ++ } ++ ++ *DescriptorAddress = Address; ++ return Size; ++} ++ diff --cc lib/lufa/Demos/Device/LowLevel/AudioOutput/Descriptors.h index 000000000,000000000..d9be070fa new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/AudioOutput/Descriptors.h @@@ -1,0 -1,0 +1,106 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * Header file for Descriptors.c. ++ */ ++ ++#ifndef _DESCRIPTORS_H_ ++#define _DESCRIPTORS_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include <avr/pgmspace.h> ++ ++ #include "Config/AppConfig.h" ++ ++ /* Macros: */ ++ /** Endpoint address of the Audio isochronous streaming data OUT endpoint. */ ++ #define AUDIO_STREAM_EPADDR (ENDPOINT_DIR_OUT | 1) ++ ++ /** Endpoint size in bytes of the Audio isochronous streaming data endpoint. */ ++ #define AUDIO_STREAM_EPSIZE 256 ++ ++ /* 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; ++ ++ // Audio Control Interface ++ USB_Descriptor_Interface_t Audio_ControlInterface; ++ USB_Audio_Descriptor_Interface_AC_t Audio_ControlInterface_SPC; ++ USB_Audio_Descriptor_InputTerminal_t Audio_InputTerminal; ++ USB_Audio_Descriptor_OutputTerminal_t Audio_OutputTerminal; ++ ++ // Audio Streaming Interface ++ USB_Descriptor_Interface_t Audio_StreamInterface_Alt0; ++ USB_Descriptor_Interface_t Audio_StreamInterface_Alt1; ++ USB_Audio_Descriptor_Interface_AS_t Audio_StreamInterface_SPC; ++ USB_Audio_Descriptor_Format_t Audio_AudioFormat; ++ USB_Audio_SampleFreq_t Audio_AudioFormatSampleRates[5]; ++ USB_Audio_Descriptor_StreamEndpoint_Std_t Audio_StreamEndpoint; ++ USB_Audio_Descriptor_StreamEndpoint_Spc_t Audio_StreamEndpoint_SPC; ++ } USB_Descriptor_Configuration_t; ++ ++ /** Enum for the device interface descriptor IDs within the device. Each interface descriptor ++ * should have a unique ID index associated with it, which can be used to refer to the ++ * interface from other descriptors. ++ */ ++ enum InterfaceDescriptors_t ++ { ++ INTERFACE_ID_AudioControl = 0, /**< Audio control interface descriptor ID */ ++ INTERFACE_ID_AudioStream = 1, /**< Audio stream interface descriptor ID */ ++ }; ++ ++ /** Enum for the device string descriptor IDs within the device. Each string descriptor should ++ * have a unique ID index associated with it, which can be used to refer to the string from ++ * other descriptors. ++ */ ++ enum StringDescriptors_t ++ { ++ STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */ ++ STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */ ++ STRING_ID_Product = 2, /**< Product string ID */ ++ }; ++ ++ /* Function Prototypes: */ ++ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ++ const uint16_t wIndex, ++ const void** const DescriptorAddress) ++ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/AudioOutput/asf.xml index 000000000,000000000..cddfb8543 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/AudioOutput/asf.xml @@@ -1,0 -1,0 +1,51 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Audio Output Device Demo (Low Level APIs)" id="lufa.demos.device.lowlevel.audio_output.example.avr8"> ++ <require idref="lufa.demos.device.lowlevel.audio_output"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.device.lowlevel.audio_output" caption="Audio Output Device Demo (Low Level APIs)"> ++ <info type="description" value="summary"> ++ Audio 1.0 Output device demo, implementing a basic USB speaker. This demo uses the Low Level LUFA APIs to manually implement a USB Class for demonstration purposes without using the simpler in-built LUFA Class Driver APIs. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Low Level APIs"/> ++ <keyword value="USB Device"/> ++ <keyword value="Audio Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="AudioOutput.txt"/> ++ ++ <build type="c-source" value="AudioOutput.c"/> ++ <build type="c-source" value="Descriptors.c"/> ++ <build type="header-file" value="AudioOutput.h"/> ++ <build type="header-file" value="Descriptors.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="module-config" subtype="required-header-file" value="AppConfig.h"/> ++ <build type="header-file" value="Config/AppConfig.h"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ <require idref="lufa.drivers.board.buttons"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Device/LowLevel/AudioOutput/doxyfile index 000000000,000000000..937ef3907 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/AudioOutput/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Audio Output 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = YES ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Device/LowLevel/AudioOutput/makefile index 000000000,000000000..a0f34c4a4 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/AudioOutput/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = AudioOutput ++SRC = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Device/LowLevel/BulkVendor/BulkVendor.c index 000000000,000000000..fe7ad84bb new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/BulkVendor/BulkVendor.c @@@ -1,0 -1,0 +1,136 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 Bulk Vendor demo. This file contains the main tasks of the demo and ++ * is responsible for the initial application hardware configuration. ++ */ ++ ++#define INCLUDE_FROM_BULKVENDOR_C ++#include "BulkVendor.h" ++ ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ USB_USBTask(); ++ ++ uint8_t ReceivedData[VENDOR_IO_EPSIZE]; ++ memset(ReceivedData, 0x00, sizeof(ReceivedData)); ++ ++ Endpoint_SelectEndpoint(VENDOR_OUT_EPADDR); ++ if (Endpoint_IsOUTReceived()) ++ { ++ Endpoint_Read_Stream_LE(ReceivedData, VENDOR_IO_EPSIZE, NULL); ++ Endpoint_ClearOUT(); ++ ++ Endpoint_SelectEndpoint(VENDOR_IN_EPADDR); ++ Endpoint_Write_Stream_LE(ReceivedData, VENDOR_IO_EPSIZE, NULL); ++ Endpoint_ClearIN(); ++ } ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#elif (ARCH == ARCH_XMEGA) ++ /* Start the PLL to multiply the 2MHz RC oscillator to 32MHz and switch the CPU core to run from it */ ++ XMEGACLK_StartPLL(CLOCK_SRC_INT_RC2MHZ, 2000000, F_CPU); ++ XMEGACLK_SetCPUClockSource(CLOCK_SRC_PLL); ++ ++ /* Start the 32MHz internal RC oscillator and start the DFLL to increase it to 48MHz using the USB SOF as a reference */ ++ XMEGACLK_StartInternalOscillator(CLOCK_SRC_INT_RC32MHZ); ++ XMEGACLK_StartDFLL(CLOCK_SRC_INT_RC32MHZ, DFLL_REF_INT_USBSOF, F_USB); ++ ++ PMIC.CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm; ++#endif ++ ++ /* Hardware Initialization */ ++ LEDs_Init(); ++ USB_Init(); ++} ++ ++/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs. */ ++void EVENT_USB_Device_Connect(void) ++{ ++ /* Indicate USB enumerating */ ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via ++ * the status LEDs. ++ */ ++void EVENT_USB_Device_Disconnect(void) ++{ ++ /* Indicate USB not ready */ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration ++ * of the USB device after enumeration - the device endpoints are configured. ++ */ ++void EVENT_USB_Device_ConfigurationChanged(void) ++{ ++ bool ConfigSuccess = true; ++ ++ /* Setup Vendor Data Endpoints */ ++ ConfigSuccess &= Endpoint_ConfigureEndpoint(VENDOR_IN_EPADDR, EP_TYPE_BULK, VENDOR_IO_EPSIZE, 1); ++ ConfigSuccess &= Endpoint_ConfigureEndpoint(VENDOR_OUT_EPADDR, EP_TYPE_BULK, VENDOR_IO_EPSIZE, 1); ++ ++ /* Indicate endpoint configuration success or failure */ ++ LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); ++} ++ ++/** Event handler for the USB_ControlRequest event. This is used to catch and process control requests sent to ++ * the device from the USB host before passing along unhandled control requests to the library for processing ++ * internally. ++ */ ++void EVENT_USB_Device_ControlRequest(void) ++{ ++ // Process vendor specific control requests here ++} diff --cc lib/lufa/Demos/Device/LowLevel/BulkVendor/BulkVendor.h index 000000000,000000000..3d74ac001 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/BulkVendor/BulkVendor.h @@@ -1,0 -1,0 +1,76 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 BulkVendor.c. ++ */ ++ ++#ifndef _BULK_VENDOR_H_ ++#define _BULK_VENDOR_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ ++ #include "Descriptors.h" ++ ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Platform/Platform.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) ++ ++ /** LED mask for the library LED driver, to indicate that the USB interface is busy. */ ++ #define LEDMASK_USB_BUSY LEDS_LED2 ++ ++ /* Function Prototypes: */ ++ void SetupHardware(void); ++ ++ void EVENT_USB_Device_Connect(void); ++ void EVENT_USB_Device_Disconnect(void); ++ void EVENT_USB_Device_ConfigurationChanged(void); ++ void EVENT_USB_Device_ControlRequest(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/BulkVendor/BulkVendor.txt index 000000000,000000000..d6688a9cd new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/BulkVendor/BulkVendor.txt @@@ -1,0 -1,0 +1,69 @@@ ++/** \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 Bulk Vendor Device Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * \li Series 6 USB AVRs (AT90USBxxx6) ++ * \li Series 4 USB AVRs (ATMEGAxxU4) ++ * \li Series 2 USB AVRs (AT90USBxx2, ATMEGAxxU2) ++ * \li Series AU XMEGA AVRs (ATXMEGAxxxAxU) ++ * \li Series B XMEGA AVRs (ATXMEGAxxxBx) ++ * \li Series C XMEGA AVRs (ATXMEGAxxxCx) ++ * ++ * \section Sec_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>Vendor (no official class)</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>Vendor (no official subclass)</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>None</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Bulk Vendor demonstration application. This gives a simple reference ++ * application for implementing a USB device that contains read/write bulk type ++ * endpoints, for implementing custom USB protocols. ++ * ++ * On start-up the system will automatically enumerate and echo back packets ++ * sent from the host. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Device/LowLevel/BulkVendor/Config/LUFAConfig.h index 000000000,000000000..0ec4635eb new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/BulkVendor/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,126 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++ #define USB_DEVICE_ONLY ++// #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++ #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #elif (ARCH == ARCH_XMEGA) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_RC32MCLKSRC | USB_OPT_BUSEVENT_PRIHIGH) ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++ #define MAX_ENDPOINT_INDEX 4 ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Device/LowLevel/BulkVendor/Descriptors.c index 000000000,000000000..9a4c2792b new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/BulkVendor/Descriptors.c @@@ -1,0 -1,0 +1,194 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special ++ * computer-readable structures which the host requests upon device enumeration, to determine ++ * the device's capabilities and functions. ++ */ ++ ++#include "Descriptors.h" ++ ++ ++/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall ++ * device characteristics, including the supported USB version, control endpoint size and the ++ * number of device configurations. The descriptor is read out by the USB host when the enumeration ++ * process begins. ++ */ ++const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = ++{ ++ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, ++ ++ .USBSpecification = VERSION_BCD(1,1,0), ++ .Class = USB_CSCP_NoDeviceClass, ++ .SubClass = USB_CSCP_NoDeviceSubclass, ++ .Protocol = USB_CSCP_NoDeviceProtocol, ++ ++ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, ++ ++ .VendorID = 0x03EB, ++ .ProductID = 0x206C, ++ .ReleaseNumber = VERSION_BCD(0,0,1), ++ ++ .ManufacturerStrIndex = STRING_ID_Manufacturer, ++ .ProductStrIndex = STRING_ID_Product, ++ .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. ++ */ ++const 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 = 1, ++ ++ .ConfigurationNumber = 1, ++ .ConfigurationStrIndex = NO_DESCRIPTOR, ++ ++ .ConfigAttributes = USB_CONFIG_ATTR_RESERVED, ++ ++ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) ++ }, ++ ++ .Vendor_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_Vendor, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 2, ++ ++ .Class = 0xFF, ++ .SubClass = 0xFF, ++ .Protocol = 0xFF, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .Vendor_DataInEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = VENDOR_IN_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = VENDOR_IO_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++ ++ .Vendor_DataOutEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = VENDOR_OUT_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = VENDOR_IO_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ } ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_String_t PROGMEM LanguageString = USB_STRING_DESCRIPTOR_ARRAY(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"LUFA Bulk Vendor 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 uint16_t wIndex, ++ const void** const DescriptorAddress) ++{ ++ const uint8_t DescriptorType = (wValue >> 8); ++ const uint8_t DescriptorNumber = (wValue & 0xFF); ++ ++ const void* Address = NULL; ++ uint16_t Size = NO_DESCRIPTOR; ++ ++ switch (DescriptorType) ++ { ++ case DTYPE_Device: ++ Address = &DeviceDescriptor; ++ Size = sizeof(USB_Descriptor_Device_t); ++ break; ++ case DTYPE_Configuration: ++ Address = &ConfigurationDescriptor; ++ Size = sizeof(USB_Descriptor_Configuration_t); ++ break; ++ case DTYPE_String: ++ switch (DescriptorNumber) ++ { ++ case STRING_ID_Language: ++ Address = &LanguageString; ++ Size = pgm_read_byte(&LanguageString.Header.Size); ++ break; ++ case STRING_ID_Manufacturer: ++ Address = &ManufacturerString; ++ Size = pgm_read_byte(&ManufacturerString.Header.Size); ++ break; ++ case STRING_ID_Product: ++ Address = &ProductString; ++ Size = pgm_read_byte(&ProductString.Header.Size); ++ break; ++ } ++ ++ break; ++ } ++ ++ *DescriptorAddress = Address; ++ return Size; ++} ++ diff --cc lib/lufa/Demos/Device/LowLevel/BulkVendor/Descriptors.h index 000000000,000000000..939717ea3 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/BulkVendor/Descriptors.h @@@ -1,0 -1,0 +1,96 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * Header file for Descriptors.c. ++ */ ++ ++#ifndef _DESCRIPTORS_H_ ++#define _DESCRIPTORS_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include <avr/pgmspace.h> ++ ++ /* Macros: */ ++ /** Endpoint address of the Bulk Vendor device-to-host data IN endpoint. */ ++ #define VENDOR_IN_EPADDR (ENDPOINT_DIR_IN | 3) ++ ++ /** Endpoint address of the Bulk Vendor host-to-device data OUT endpoint. */ ++ #define VENDOR_OUT_EPADDR (ENDPOINT_DIR_OUT | 4) ++ ++ /** Size in bytes of the Bulk Vendor data endpoints. */ ++ #define VENDOR_IO_EPSIZE 64 ++ ++ /* 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; ++ ++ // Vendor Interface ++ USB_Descriptor_Interface_t Vendor_Interface; ++ USB_Descriptor_Endpoint_t Vendor_DataInEndpoint; ++ USB_Descriptor_Endpoint_t Vendor_DataOutEndpoint; ++ } USB_Descriptor_Configuration_t; ++ ++ /** Enum for the device interface descriptor IDs within the device. Each interface descriptor ++ * should have a unique ID index associated with it, which can be used to refer to the ++ * interface from other descriptors. ++ */ ++ enum InterfaceDescriptors_t ++ { ++ INTERFACE_ID_Vendor = 0, /**< Vendor interface descriptor ID */ ++ }; ++ ++ /** Enum for the device string descriptor IDs within the device. Each string descriptor should ++ * have a unique ID index associated with it, which can be used to refer to the string from ++ * other descriptors. ++ */ ++ enum StringDescriptors_t ++ { ++ STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */ ++ STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */ ++ STRING_ID_Product = 2, /**< Product string ID */ ++ }; ++ ++ /* Function Prototypes: */ ++ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ++ const uint16_t wIndex, ++ const void** const DescriptorAddress) ++ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/BulkVendor/HostTestApp/test_bulk_vendor.py index 000000000,000000000..fff8ecd78 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/BulkVendor/HostTestApp/test_bulk_vendor.py @@@ -1,0 -1,0 +1,67 @@@ ++""" ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++""" ++ ++""" ++ LUFA Bulk Vendor device demo host test script. This script will send and ++ receive a continuous stream of packets to/from to the device, to show ++ bidirectional communications. ++ ++ Requires the pyUSB library (http://sourceforge.net/projects/pyusb/). ++""" ++ ++import sys ++from time import sleep ++import usb.core ++import usb.util ++ ++# Bulk Vendor HID device VID and PID ++device_vid = 0x03EB ++device_pid = 0x206C ++device_in_ep = 3 ++device_out_ep = 4 ++ ++ ++def get_vendor_device_handle(): ++ dev_handle = usb.core.find(idVendor=device_vid, idProduct=device_pid) ++ return dev_handle ++ ++ ++def write(device, packet): ++ device.write(usb.util.ENDPOINT_OUT | device_out_ep, packet, 0, 1000) ++ print("Sent Packet: {0}".format(packet)) ++ ++ ++def read(device): ++ packet = device.read(usb.util.ENDPOINT_IN | device_in_ep, 64, 0, 1000) ++ print("Received Packet: {0}".format(''.join([chr(x) for x in packet]))) ++ return packet ++ ++ ++def main(): ++ vendor_device = get_vendor_device_handle() ++ ++ if vendor_device is None: ++ print("No valid Vendor device found.") ++ sys.exit(1) ++ ++ vendor_device.set_configuration() ++ ++ print("Connected to device 0x%04X/0x%04X - %s [%s]" % ++ (vendor_device.idVendor, vendor_device.idProduct, ++ usb.util.get_string(vendor_device, 255, vendor_device.iProduct), ++ usb.util.get_string(vendor_device, 255, vendor_device.iManufacturer))) ++ ++ x = 0 ++ while 1: ++ x = x + 1 % 255 ++ write(vendor_device, "TEST PACKET %d" % x) ++ read(vendor_device) ++ sleep(1) ++ ++if __name__ == '__main__': ++ main() diff --cc lib/lufa/Demos/Device/LowLevel/BulkVendor/WindowsDriver/LUFA_Bulk_Vendor_Demo.inf index 000000000,000000000..32a29fdc5 new file mode 100644 Binary files differ diff --cc lib/lufa/Demos/Device/LowLevel/BulkVendor/WindowsDriver/amd64/libusb0.dll index 000000000,000000000..f916b0898 new file mode 100644 Binary files differ diff --cc lib/lufa/Demos/Device/LowLevel/BulkVendor/WindowsDriver/amd64/libusb0.sys index 000000000,000000000..0718dfb7c new file mode 100644 Binary files differ diff --cc lib/lufa/Demos/Device/LowLevel/BulkVendor/WindowsDriver/ia64/libusb0.dll index 000000000,000000000..292df2785 new file mode 100644 Binary files differ diff --cc lib/lufa/Demos/Device/LowLevel/BulkVendor/WindowsDriver/ia64/libusb0.sys index 000000000,000000000..f17914b8c new file mode 100644 Binary files differ diff --cc lib/lufa/Demos/Device/LowLevel/BulkVendor/WindowsDriver/installer_x64.exe index 000000000,000000000..c38919ee5 new file mode 100644 Binary files differ diff --cc lib/lufa/Demos/Device/LowLevel/BulkVendor/WindowsDriver/installer_x86.exe index 000000000,000000000..030ec300c new file mode 100644 Binary files differ diff --cc lib/lufa/Demos/Device/LowLevel/BulkVendor/WindowsDriver/license/libusb0/installer_license.txt index 000000000,000000000..56bb2cda2 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/BulkVendor/WindowsDriver/license/libusb0/installer_license.txt @@@ -1,0 -1,0 +1,851 @@@ ++Copyright (c) 2002-2004 Stephan Meyer, <ste_meyer@web.de> ++Copyright (c) 2000-2004 Johannes Erdfelt, <johannes@erdfelt.com> ++Copyright (c) 2000-2004 Thomas Sailer, <sailer@ife.ee.ethz.ch> ++Copyright (c) 2010 Travis Robinson, <libusbdotnet@gmail.com> ++ ++This software is distributed under the following licenses: ++Driver: GNU General Public License (GPL) ++Library, Test Files, Installer: GNU Lesser General Public License (LGPL) ++ ++*********************************************************************** ++ GNU GENERAL PUBLIC LICENSE ++ Version 3, 29 June 2007 ++ ++ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> ++ Everyone is permitted to copy and distribute verbatim copies ++ of this license document, but changing it is not allowed. ++ ++ Preamble ++ ++ The GNU General Public License is a free, copyleft license for ++software and other kinds of works. ++ ++ The licenses for most software and other practical works are designed ++to take away your freedom to share and change the works. By contrast, ++the GNU General Public License is intended to guarantee your freedom to ++share and change all versions of a program--to make sure it remains free ++software for all its users. We, the Free Software Foundation, use the ++GNU General Public License for most of our software; it applies also to ++any other work released this way by its authors. You can apply it to ++your programs, too. ++ ++ When we speak of free software, we are referring to freedom, not ++price. Our General Public Licenses are designed to make sure that you ++have the freedom to distribute copies of free software (and charge for ++them if you wish), that you receive source code or can get it if you ++want it, that you can change the software or use pieces of it in new ++free programs, and that you know you can do these things. ++ ++ To protect your rights, we need to prevent others from denying you ++these rights or asking you to surrender the rights. Therefore, you have ++certain responsibilities if you distribute copies of the software, or if ++you modify it: responsibilities to respect the freedom of others. ++ ++ For example, if you distribute copies of such a program, whether ++gratis or for a fee, you must pass on to the recipients the same ++freedoms that you received. You must make sure that they, too, receive ++or can get the source code. And you must show them these terms so they ++know their rights. ++ ++ Developers that use the GNU GPL protect your rights with two steps: ++(1) assert copyright on the software, and (2) offer you this License ++giving you legal permission to copy, distribute and/or modify it. ++ ++ For the developers' and authors' protection, the GPL clearly explains ++that there is no warranty for this free software. For both users' and ++authors' sake, the GPL requires that modified versions be marked as ++changed, so that their problems will not be attributed erroneously to ++authors of previous versions. ++ ++ Some devices are designed to deny users access to install or run ++modified versions of the software inside them, although the manufacturer ++can do so. This is fundamentally incompatible with the aim of ++protecting users' freedom to change the software. The systematic ++pattern of such abuse occurs in the area of products for individuals to ++use, which is precisely where it is most unacceptable. Therefore, we ++have designed this version of the GPL to prohibit the practice for those ++products. If such problems arise substantially in other domains, we ++stand ready to extend this provision to those domains in future versions ++of the GPL, as needed to protect the freedom of users. ++ ++ Finally, every program is threatened constantly by software patents. ++States should not allow patents to restrict development and use of ++software on general-purpose computers, but in those that do, we wish to ++avoid the special danger that patents applied to a free program could ++make it effectively proprietary. To prevent this, the GPL assures that ++patents cannot be used to render the program non-free. ++ ++ The precise terms and conditions for copying, distribution and ++modification follow. ++ ++ TERMS AND CONDITIONS ++ ++ 0. Definitions. ++ ++ "This License" refers to version 3 of the GNU General Public License. ++ ++ "Copyright" also means copyright-like laws that apply to other kinds of ++works, such as semiconductor masks. ++ ++ "The Program" refers to any copyrightable work licensed under this ++License. Each licensee is addressed as "you". "Licensees" and ++"recipients" may be individuals or organizations. ++ ++ To "modify" a work means to copy from or adapt all or part of the work ++in a fashion requiring copyright permission, other than the making of an ++exact copy. The resulting work is called a "modified version" of the ++earlier work or a work "based on" the earlier work. ++ ++ A "covered work" means either the unmodified Program or a work based ++on the Program. ++ ++ To "propagate" a work means to do anything with it that, without ++permission, would make you directly or secondarily liable for ++infringement under applicable copyright law, except executing it on a ++computer or modifying a private copy. Propagation includes copying, ++distribution (with or without modification), making available to the ++public, and in some countries other activities as well. ++ ++ To "convey" a work means any kind of propagation that enables other ++parties to make or receive copies. Mere interaction with a user through ++a computer network, with no transfer of a copy, is not conveying. ++ ++ An interactive user interface displays "Appropriate Legal Notices" ++to the extent that it includes a convenient and prominently visible ++feature that (1) displays an appropriate copyright notice, and (2) ++tells the user that there is no warranty for the work (except to the ++extent that warranties are provided), that licensees may convey the ++work under this License, and how to view a copy of this License. If ++the interface presents a list of user commands or options, such as a ++menu, a prominent item in the list meets this criterion. ++ ++ 1. Source Code. ++ ++ The "source code" for a work means the preferred form of the work ++for making modifications to it. "Object code" means any non-source ++form of a work. ++ ++ A "Standard Interface" means an interface that either is an official ++standard defined by a recognized standards body, or, in the case of ++interfaces specified for a particular programming language, one that ++is widely used among developers working in that language. ++ ++ The "System Libraries" of an executable work include anything, other ++than the work as a whole, that (a) is included in the normal form of ++packaging a Major Component, but which is not part of that Major ++Component, and (b) serves only to enable use of the work with that ++Major Component, or to implement a Standard Interface for which an ++implementation is available to the public in source code form. A ++"Major Component", in this context, means a major essential component ++(kernel, window system, and so on) of the specific operating system ++(if any) on which the executable work runs, or a compiler used to ++produce the work, or an object code interpreter used to run it. ++ ++ The "Corresponding Source" for a work in object code form means all ++the source code needed to generate, install, and (for an executable ++work) run the object code and to modify the work, including scripts to ++control those activities. However, it does not include the work's ++System Libraries, or general-purpose tools or generally available free ++programs which are used unmodified in performing those activities but ++which are not part of the work. For example, Corresponding Source ++includes interface definition files associated with source files for ++the work, and the source code for shared libraries and dynamically ++linked subprograms that the work is specifically designed to require, ++such as by intimate data communication or control flow between those ++subprograms and other parts of the work. ++ ++ The Corresponding Source need not include anything that users ++can regenerate automatically from other parts of the Corresponding ++Source. ++ ++ The Corresponding Source for a work in source code form is that ++same work. ++ ++ 2. Basic Permissions. ++ ++ All rights granted under this License are granted for the term of ++copyright on the Program, and are irrevocable provided the stated ++conditions are met. This License explicitly affirms your unlimited ++permission to run the unmodified Program. The output from running a ++covered work is covered by this License only if the output, given its ++content, constitutes a covered work. This License acknowledges your ++rights of fair use or other equivalent, as provided by copyright law. ++ ++ You may make, run and propagate covered works that you do not ++convey, without conditions so long as your license otherwise remains ++in force. You may convey covered works to others for the sole purpose ++of having them make modifications exclusively for you, or provide you ++with facilities for running those works, provided that you comply with ++the terms of this License in conveying all material for which you do ++not control copyright. Those thus making or running the covered works ++for you must do so exclusively on your behalf, under your direction ++and control, on terms that prohibit them from making any copies of ++your copyrighted material outside their relationship with you. ++ ++ Conveying under any other circumstances is permitted solely under ++the conditions stated below. Sublicensing is not allowed; section 10 ++makes it unnecessary. ++ ++ 3. Protecting Users' Legal Rights From Anti-Circumvention Law. ++ ++ No covered work shall be deemed part of an effective technological ++measure under any applicable law fulfilling obligations under article ++11 of the WIPO copyright treaty adopted on 20 December 1996, or ++similar laws prohibiting or restricting circumvention of such ++measures. ++ ++ When you convey a covered work, you waive any legal power to forbid ++circumvention of technological measures to the extent such circumvention ++is effected by exercising rights under this License with respect to ++the covered work, and you disclaim any intention to limit operation or ++modification of the work as a means of enforcing, against the work's ++users, your or third parties' legal rights to forbid circumvention of ++technological measures. ++ ++ 4. Conveying Verbatim Copies. ++ ++ You may convey verbatim copies of the Program's source code as you ++receive it, in any medium, provided that you conspicuously and ++appropriately publish on each copy an appropriate copyright notice; ++keep intact all notices stating that this License and any ++non-permissive terms added in accord with section 7 apply to the code; ++keep intact all notices of the absence of any warranty; and give all ++recipients a copy of this License along with the Program. ++ ++ You may charge any price or no price for each copy that you convey, ++and you may offer support or warranty protection for a fee. ++ ++ 5. Conveying Modified Source Versions. ++ ++ You may convey a work based on the Program, or the modifications to ++produce it from the Program, in the form of source code under the ++terms of section 4, provided that you also meet all of these conditions: ++ ++ a) The work must carry prominent notices stating that you modified ++ it, and giving a relevant date. ++ ++ b) The work must carry prominent notices stating that it is ++ released under this License and any conditions added under section ++ 7. This requirement modifies the requirement in section 4 to ++ "keep intact all notices". ++ ++ c) You must license the entire work, as a whole, under this ++ License to anyone who comes into possession of a copy. This ++ License will therefore apply, along with any applicable section 7 ++ additional terms, to the whole of the work, and all its parts, ++ regardless of how they are packaged. This License gives no ++ permission to license the work in any other way, but it does not ++ invalidate such permission if you have separately received it. ++ ++ d) If the work has interactive user interfaces, each must display ++ Appropriate Legal Notices; however, if the Program has interactive ++ interfaces that do not display Appropriate Legal Notices, your ++ work need not make them do so. ++ ++ A compilation of a covered work with other separate and independent ++works, which are not by their nature extensions of the covered work, ++and which are not combined with it such as to form a larger program, ++in or on a volume of a storage or distribution medium, is called an ++"aggregate" if the compilation and its resulting copyright are not ++used to limit the access or legal rights of the compilation's users ++beyond what the individual works permit. Inclusion of a covered work ++in an aggregate does not cause this License to apply to the other ++parts of the aggregate. ++ ++ 6. Conveying Non-Source Forms. ++ ++ You may convey a covered work in object code form under the terms ++of sections 4 and 5, provided that you also convey the ++machine-readable Corresponding Source under the terms of this License, ++in one of these ways: ++ ++ a) Convey the object code in, or embodied in, a physical product ++ (including a physical distribution medium), accompanied by the ++ Corresponding Source fixed on a durable physical medium ++ customarily used for software interchange. ++ ++ b) Convey the object code in, or embodied in, a physical product ++ (including a physical distribution medium), accompanied by a ++ written offer, valid for at least three years and valid for as ++ long as you offer spare parts or customer support for that product ++ model, to give anyone who possesses the object code either (1) a ++ copy of the Corresponding Source for all the software in the ++ product that is covered by this License, on a durable physical ++ medium customarily used for software interchange, for a price no ++ more than your reasonable cost of physically performing this ++ conveying of source, or (2) access to copy the ++ Corresponding Source from a network server at no charge. ++ ++ c) Convey individual copies of the object code with a copy of the ++ written offer to provide the Corresponding Source. This ++ alternative is allowed only occasionally and noncommercially, and ++ only if you received the object code with such an offer, in accord ++ with subsection 6b. ++ ++ d) Convey the object code by offering access from a designated ++ place (gratis or for a charge), and offer equivalent access to the ++ Corresponding Source in the same way through the same place at no ++ further charge. You need not require recipients to copy the ++ Corresponding Source along with the object code. If the place to ++ copy the object code is a network server, the Corresponding Source ++ may be on a different server (operated by you or a third party) ++ that supports equivalent copying facilities, provided you maintain ++ clear directions next to the object code saying where to find the ++ Corresponding Source. Regardless of what server hosts the ++ Corresponding Source, you remain obligated to ensure that it is ++ available for as long as needed to satisfy these requirements. ++ ++ e) Convey the object code using peer-to-peer transmission, provided ++ you inform other peers where the object code and Corresponding ++ Source of the work are being offered to the general public at no ++ charge under subsection 6d. ++ ++ A separable portion of the object code, whose source code is excluded ++from the Corresponding Source as a System Library, need not be ++included in conveying the object code work. ++ ++ A "User Product" is either (1) a "consumer product", which means any ++tangible personal property which is normally used for personal, family, ++or household purposes, or (2) anything designed or sold for incorporation ++into a dwelling. In determining whether a product is a consumer product, ++doubtful cases shall be resolved in favor of coverage. For a particular ++product received by a particular user, "normally used" refers to a ++typical or common use of that class of product, regardless of the status ++of the particular user or of the way in which the particular user ++actually uses, or expects or is expected to use, the product. A product ++is a consumer product regardless of whether the product has substantial ++commercial, industrial or non-consumer uses, unless such uses represent ++the only significant mode of use of the product. ++ ++ "Installation Information" for a User Product means any methods, ++procedures, authorization keys, or other information required to install ++and execute modified versions of a covered work in that User Product from ++a modified version of its Corresponding Source. The information must ++suffice to ensure that the continued functioning of the modified object ++code is in no case prevented or interfered with solely because ++modification has been made. ++ ++ If you convey an object code work under this section in, or with, or ++specifically for use in, a User Product, and the conveying occurs as ++part of a transaction in which the right of possession and use of the ++User Product is transferred to the recipient in perpetuity or for a ++fixed term (regardless of how the transaction is characterized), the ++Corresponding Source conveyed under this section must be accompanied ++by the Installation Information. But this requirement does not apply ++if neither you nor any third party retains the ability to install ++modified object code on the User Product (for example, the work has ++been installed in ROM). ++ ++ The requirement to provide Installation Information does not include a ++requirement to continue to provide support service, warranty, or updates ++for a work that has been modified or installed by the recipient, or for ++the User Product in which it has been modified or installed. Access to a ++network may be denied when the modification itself materially and ++adversely affects the operation of the network or violates the rules and ++protocols for communication across the network. ++ ++ Corresponding Source conveyed, and Installation Information provided, ++in accord with this section must be in a format that is publicly ++documented (and with an implementation available to the public in ++source code form), and must require no special password or key for ++unpacking, reading or copying. ++ ++ 7. Additional Terms. ++ ++ "Additional permissions" are terms that supplement the terms of this ++License by making exceptions from one or more of its conditions. ++Additional permissions that are applicable to the entire Program shall ++be treated as though they were included in this License, to the extent ++that they are valid under applicable law. If additional permissions ++apply only to part of the Program, that part may be used separately ++under those permissions, but the entire Program remains governed by ++this License without regard to the additional permissions. ++ ++ When you convey a copy of a covered work, you may at your option ++remove any additional permissions from that copy, or from any part of ++it. (Additional permissions may be written to require their own ++removal in certain cases when you modify the work.) You may place ++additional permissions on material, added by you to a covered work, ++for which you have or can give appropriate copyright permission. ++ ++ Notwithstanding any other provision of this License, for material you ++add to a covered work, you may (if authorized by the copyright holders of ++that material) supplement the terms of this License with terms: ++ ++ a) Disclaiming warranty or limiting liability differently from the ++ terms of sections 15 and 16 of this License; or ++ ++ b) Requiring preservation of specified reasonable legal notices or ++ author attributions in that material or in the Appropriate Legal ++ Notices displayed by works containing it; or ++ ++ c) Prohibiting misrepresentation of the origin of that material, or ++ requiring that modified versions of such material be marked in ++ reasonable ways as different from the original version; or ++ ++ d) Limiting the use for publicity purposes of names of licensors or ++ authors of the material; or ++ ++ e) Declining to grant rights under trademark law for use of some ++ trade names, trademarks, or service marks; or ++ ++ f) Requiring indemnification of licensors and authors of that ++ material by anyone who conveys the material (or modified versions of ++ it) with contractual assumptions of liability to the recipient, for ++ any liability that these contractual assumptions directly impose on ++ those licensors and authors. ++ ++ All other non-permissive additional terms are considered "further ++restrictions" within the meaning of section 10. If the Program as you ++received it, or any part of it, contains a notice stating that it is ++governed by this License along with a term that is a further ++restriction, you may remove that term. If a license document contains ++a further restriction but permits relicensing or conveying under this ++License, you may add to a covered work material governed by the terms ++of that license document, provided that the further restriction does ++not survive such relicensing or conveying. ++ ++ If you add terms to a covered work in accord with this section, you ++must place, in the relevant source files, a statement of the ++additional terms that apply to those files, or a notice indicating ++where to find the applicable terms. ++ ++ Additional terms, permissive or non-permissive, may be stated in the ++form of a separately written license, or stated as exceptions; ++the above requirements apply either way. ++ ++ 8. Termination. ++ ++ You may not propagate or modify a covered work except as expressly ++provided under this License. Any attempt otherwise to propagate or ++modify it is void, and will automatically terminate your rights under ++this License (including any patent licenses granted under the third ++paragraph of section 11). ++ ++ However, if you cease all violation of this License, then your ++license from a particular copyright holder is reinstated (a) ++provisionally, unless and until the copyright holder explicitly and ++finally terminates your license, and (b) permanently, if the copyright ++holder fails to notify you of the violation by some reasonable means ++prior to 60 days after the cessation. ++ ++ Moreover, your license from a particular copyright holder is ++reinstated permanently if the copyright holder notifies you of the ++violation by some reasonable means, this is the first time you have ++received notice of violation of this License (for any work) from that ++copyright holder, and you cure the violation prior to 30 days after ++your receipt of the notice. ++ ++ Termination of your rights under this section does not terminate the ++licenses of parties who have received copies or rights from you under ++this License. If your rights have been terminated and not permanently ++reinstated, you do not qualify to receive new licenses for the same ++material under section 10. ++ ++ 9. Acceptance Not Required for Having Copies. ++ ++ You are not required to accept this License in order to receive or ++run a copy of the Program. Ancillary propagation of a covered work ++occurring solely as a consequence of using peer-to-peer transmission ++to receive a copy likewise does not require acceptance. However, ++nothing other than this License grants you permission to propagate or ++modify any covered work. These actions infringe copyright if you do ++not accept this License. Therefore, by modifying or propagating a ++covered work, you indicate your acceptance of this License to do so. ++ ++ 10. Automatic Licensing of Downstream Recipients. ++ ++ Each time you convey a covered work, the recipient automatically ++receives a license from the original licensors, to run, modify and ++propagate that work, subject to this License. You are not responsible ++for enforcing compliance by third parties with this License. ++ ++ An "entity transaction" is a transaction transferring control of an ++organization, or substantially all assets of one, or subdividing an ++organization, or merging organizations. If propagation of a covered ++work results from an entity transaction, each party to that ++transaction who receives a copy of the work also receives whatever ++licenses to the work the party's predecessor in interest had or could ++give under the previous paragraph, plus a right to possession of the ++Corresponding Source of the work from the predecessor in interest, if ++the predecessor has it or can get it with reasonable efforts. ++ ++ You may not impose any further restrictions on the exercise of the ++rights granted or affirmed under this License. For example, you may ++not impose a license fee, royalty, or other charge for exercise of ++rights granted under this License, and you may not initiate litigation ++(including a cross-claim or counterclaim in a lawsuit) alleging that ++any patent claim is infringed by making, using, selling, offering for ++sale, or importing the Program or any portion of it. ++ ++ 11. Patents. ++ ++ A "contributor" is a copyright holder who authorizes use under this ++License of the Program or a work on which the Program is based. The ++work thus licensed is called the contributor's "contributor version". ++ ++ A contributor's "essential patent claims" are all patent claims ++owned or controlled by the contributor, whether already acquired or ++hereafter acquired, that would be infringed by some manner, permitted ++by this License, of making, using, or selling its contributor version, ++but do not include claims that would be infringed only as a ++consequence of further modification of the contributor version. For ++purposes of this definition, "control" includes the right to grant ++patent sublicenses in a manner consistent with the requirements of ++this License. ++ ++ Each contributor grants you a non-exclusive, worldwide, royalty-free ++patent license under the contributor's essential patent claims, to ++make, use, sell, offer for sale, import and otherwise run, modify and ++propagate the contents of its contributor version. ++ ++ In the following three paragraphs, a "patent license" is any express ++agreement or commitment, however denominated, not to enforce a patent ++(such as an express permission to practice a patent or covenant not to ++sue for patent infringement). To "grant" such a patent license to a ++party means to make such an agreement or commitment not to enforce a ++patent against the party. ++ ++ If you convey a covered work, knowingly relying on a patent license, ++and the Corresponding Source of the work is not available for anyone ++to copy, free of charge and under the terms of this License, through a ++publicly available network server or other readily accessible means, ++then you must either (1) cause the Corresponding Source to be so ++available, or (2) arrange to deprive yourself of the benefit of the ++patent license for this particular work, or (3) arrange, in a manner ++consistent with the requirements of this License, to extend the patent ++license to downstream recipients. "Knowingly relying" means you have ++actual knowledge that, but for the patent license, your conveying the ++covered work in a country, or your recipient's use of the covered work ++in a country, would infringe one or more identifiable patents in that ++country that you have reason to believe are valid. ++ ++ If, pursuant to or in connection with a single transaction or ++arrangement, you convey, or propagate by procuring conveyance of, a ++covered work, and grant a patent license to some of the parties ++receiving the covered work authorizing them to use, propagate, modify ++or convey a specific copy of the covered work, then the patent license ++you grant is automatically extended to all recipients of the covered ++work and works based on it. ++ ++ A patent license is "discriminatory" if it does not include within ++the scope of its coverage, prohibits the exercise of, or is ++conditioned on the non-exercise of one or more of the rights that are ++specifically granted under this License. You may not convey a covered ++work if you are a party to an arrangement with a third party that is ++in the business of distributing software, under which you make payment ++to the third party based on the extent of your activity of conveying ++the work, and under which the third party grants, to any of the ++parties who would receive the covered work from you, a discriminatory ++patent license (a) in connection with copies of the covered work ++conveyed by you (or copies made from those copies), or (b) primarily ++for and in connection with specific products or compilations that ++contain the covered work, unless you entered into that arrangement, ++or that patent license was granted, prior to 28 March 2007. ++ ++ Nothing in this License shall be construed as excluding or limiting ++any implied license or other defenses to infringement that may ++otherwise be available to you under applicable patent law. ++ ++ 12. No Surrender of Others' Freedom. ++ ++ If conditions are imposed on you (whether by court order, agreement or ++otherwise) that contradict the conditions of this License, they do not ++excuse you from the conditions of this License. If you cannot convey a ++covered work so as to satisfy simultaneously your obligations under this ++License and any other pertinent obligations, then as a consequence you may ++not convey it at all. For example, if you agree to terms that obligate you ++to collect a royalty for further conveying from those to whom you convey ++the Program, the only way you could satisfy both those terms and this ++License would be to refrain entirely from conveying the Program. ++ ++ 13. Use with the GNU Affero General Public License. ++ ++ Notwithstanding any other provision of this License, you have ++permission to link or combine any covered work with a work licensed ++under version 3 of the GNU Affero General Public License into a single ++combined work, and to convey the resulting work. The terms of this ++License will continue to apply to the part which is the covered work, ++but the special requirements of the GNU Affero General Public License, ++section 13, concerning interaction through a network will apply to the ++combination as such. ++ ++ 14. Revised Versions of this License. ++ ++ The Free Software Foundation may publish revised and/or new versions of ++the GNU General Public License from time to time. Such new versions will ++be similar in spirit to the present version, but may differ in detail to ++address new problems or concerns. ++ ++ Each version is given a distinguishing version number. If the ++Program specifies that a certain numbered version of the GNU General ++Public License "or any later version" applies to it, you have the ++option of following the terms and conditions either of that numbered ++version or of any later version published by the Free Software ++Foundation. If the Program does not specify a version number of the ++GNU General Public License, you may choose any version ever published ++by the Free Software Foundation. ++ ++ If the Program specifies that a proxy can decide which future ++versions of the GNU General Public License can be used, that proxy's ++public statement of acceptance of a version permanently authorizes you ++to choose that version for the Program. ++ ++ Later license versions may give you additional or different ++permissions. However, no additional obligations are imposed on any ++author or copyright holder as a result of your choosing to follow a ++later version. ++ ++ 15. Disclaimer of Warranty. ++ ++ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY ++APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT ++HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY ++OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, ++THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR ++PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM ++IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ++ALL NECESSARY SERVICING, REPAIR OR CORRECTION. ++ ++ 16. Limitation of Liability. ++ ++ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING ++WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS ++THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY ++GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE ++USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF ++DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD ++PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), ++EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF ++SUCH DAMAGES. ++ ++ 17. Interpretation of Sections 15 and 16. ++ ++ If the disclaimer of warranty and limitation of liability provided ++above cannot be given local legal effect according to their terms, ++reviewing courts shall apply local law that most closely approximates ++an absolute waiver of all civil liability in connection with the ++Program, unless a warranty or assumption of liability accompanies a ++copy of the Program in return for a fee. ++ ++ END OF TERMS AND CONDITIONS ++ ++ How to Apply These Terms to Your New Programs ++ ++ If you develop a new program, and you want it to be of the greatest ++possible use to the public, the best way to achieve this is to make it ++free software which everyone can redistribute and change under these terms. ++ ++ To do so, attach the following notices to the program. It is safest ++to attach them to the start of each source file to most effectively ++state the exclusion of warranty; and each file should have at least ++the "copyright" line and a pointer to where the full notice is found. ++ ++ <one line to give the program's name and a brief idea of what it does.> ++ Copyright (C) <year> <name of author> ++ ++ This program is free software: you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation, either version 3 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program. If not, see <http://www.gnu.org/licenses/>. ++ ++Also add information on how to contact you by electronic and paper mail. ++ ++ If the program does terminal interaction, make it output a short ++notice like this when it starts in an interactive mode: ++ ++ <program> Copyright (C) <year> <name of author> ++ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. ++ This is free software, and you are welcome to redistribute it ++ under certain conditions; type `show c' for details. ++ ++The hypothetical commands `show w' and `show c' should show the appropriate ++parts of the General Public License. Of course, your program's commands ++might be different; for a GUI interface, you would use an "about box". ++ ++ You should also get your employer (if you work as a programmer) or school, ++if any, to sign a "copyright disclaimer" for the program, if necessary. ++For more information on this, and how to apply and follow the GNU GPL, see ++<http://www.gnu.org/licenses/>. ++ ++ The GNU General Public License does not permit incorporating your program ++into proprietary programs. If your program is a subroutine library, you ++may consider it more useful to permit linking proprietary applications with ++the library. If this is what you want to do, use the GNU Lesser General ++Public License instead of this License. But first, please read ++<http://www.gnu.org/philosophy/why-not-lgpl.html>. ++ ++ GNU LESSER GENERAL PUBLIC LICENSE ++ Version 3, 29 June 2007 ++ ++ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> ++ Everyone is permitted to copy and distribute verbatim copies ++ of this license document, but changing it is not allowed. ++ ++ ++ This version of the GNU Lesser General Public License incorporates ++the terms and conditions of version 3 of the GNU General Public ++License, supplemented by the additional permissions listed below. ++ ++ 0. Additional Definitions. ++ ++ As used herein, "this License" refers to version 3 of the GNU Lesser ++General Public License, and the "GNU GPL" refers to version 3 of the GNU ++General Public License. ++ ++ "The Library" refers to a covered work governed by this License, ++other than an Application or a Combined Work as defined below. ++ ++ An "Application" is any work that makes use of an interface provided ++by the Library, but which is not otherwise based on the Library. ++Defining a subclass of a class defined by the Library is deemed a mode ++of using an interface provided by the Library. ++ ++ A "Combined Work" is a work produced by combining or linking an ++Application with the Library. The particular version of the Library ++with which the Combined Work was made is also called the "Linked ++Version". ++ ++ The "Minimal Corresponding Source" for a Combined Work means the ++Corresponding Source for the Combined Work, excluding any source code ++for portions of the Combined Work that, considered in isolation, are ++based on the Application, and not on the Linked Version. ++ ++ The "Corresponding Application Code" for a Combined Work means the ++object code and/or source code for the Application, including any data ++and utility programs needed for reproducing the Combined Work from the ++Application, but excluding the System Libraries of the Combined Work. ++ ++ 1. Exception to Section 3 of the GNU GPL. ++ ++ You may convey a covered work under sections 3 and 4 of this License ++without being bound by section 3 of the GNU GPL. ++ ++ 2. Conveying Modified Versions. ++ ++ If you modify a copy of the Library, and, in your modifications, a ++facility refers to a function or data to be supplied by an Application ++that uses the facility (other than as an argument passed when the ++facility is invoked), then you may convey a copy of the modified ++version: ++ ++ a) under this License, provided that you make a good faith effort to ++ ensure that, in the event an Application does not supply the ++ function or data, the facility still operates, and performs ++ whatever part of its purpose remains meaningful, or ++ ++ b) under the GNU GPL, with none of the additional permissions of ++ this License applicable to that copy. ++ ++ 3. Object Code Incorporating Material from Library Header Files. ++ ++ The object code form of an Application may incorporate material from ++a header file that is part of the Library. You may convey such object ++code under terms of your choice, provided that, if the incorporated ++material is not limited to numerical parameters, data structure ++layouts and accessors, or small macros, inline functions and templates ++(ten or fewer lines in length), you do both of the following: ++ ++ a) Give prominent notice with each copy of the object code that the ++ Library is used in it and that the Library and its use are ++ covered by this License. ++ ++ b) Accompany the object code with a copy of the GNU GPL and this license ++ document. ++ ++ 4. Combined Works. ++ ++ You may convey a Combined Work under terms of your choice that, ++taken together, effectively do not restrict modification of the ++portions of the Library contained in the Combined Work and reverse ++engineering for debugging such modifications, if you also do each of ++the following: ++ ++ a) Give prominent notice with each copy of the Combined Work that ++ the Library is used in it and that the Library and its use are ++ covered by this License. ++ ++ b) Accompany the Combined Work with a copy of the GNU GPL and this license ++ document. ++ ++ c) For a Combined Work that displays copyright notices during ++ execution, include the copyright notice for the Library among ++ these notices, as well as a reference directing the user to the ++ copies of the GNU GPL and this license document. ++ ++ d) Do one of the following: ++ ++ 0) Convey the Minimal Corresponding Source under the terms of this ++ License, and the Corresponding Application Code in a form ++ suitable for, and under terms that permit, the user to ++ recombine or relink the Application with a modified version of ++ the Linked Version to produce a modified Combined Work, in the ++ manner specified by section 6 of the GNU GPL for conveying ++ Corresponding Source. ++ ++ 1) Use a suitable shared library mechanism for linking with the ++ Library. A suitable mechanism is one that (a) uses at run time ++ a copy of the Library already present on the user's computer ++ system, and (b) will operate properly with a modified version ++ of the Library that is interface-compatible with the Linked ++ Version. ++ ++ e) Provide Installation Information, but only if you would otherwise ++ be required to provide such information under section 6 of the ++ GNU GPL, and only to the extent that such information is ++ necessary to install and execute a modified version of the ++ Combined Work produced by recombining or relinking the ++ Application with a modified version of the Linked Version. (If ++ you use option 4d0, the Installation Information must accompany ++ the Minimal Corresponding Source and Corresponding Application ++ Code. If you use option 4d1, you must provide the Installation ++ Information in the manner specified by section 6 of the GNU GPL ++ for conveying Corresponding Source.) ++ ++ 5. Combined Libraries. ++ ++ You may place library facilities that are a work based on the ++Library side by side in a single library together with other library ++facilities that are not Applications and are not covered by this ++License, and convey such a combined library under terms of your ++choice, if you do both of the following: ++ ++ a) Accompany the combined library with a copy of the same work based ++ on the Library, uncombined with any other library facilities, ++ conveyed under the terms of this License. ++ ++ b) Give prominent notice with the combined library that part of it ++ is a work based on the Library, and explaining where to find the ++ accompanying uncombined form of the same work. ++ ++ 6. Revised Versions of the GNU Lesser General Public License. ++ ++ The Free Software Foundation may publish revised and/or new versions ++of the GNU Lesser General Public License from time to time. Such new ++versions will be similar in spirit to the present version, but may ++differ in detail to address new problems or concerns. ++ ++ Each version is given a distinguishing version number. If the ++Library as you received it specifies that a certain numbered version ++of the GNU Lesser General Public License "or any later version" ++applies to it, you have the option of following the terms and ++conditions either of that published version or of any later version ++published by the Free Software Foundation. If the Library as you ++received it does not specify a version number of the GNU Lesser ++General Public License, you may choose any version of the GNU Lesser ++General Public License ever published by the Free Software Foundation. ++ ++ If the Library as you received it specifies that a proxy can decide ++whether future versions of the GNU Lesser General Public License shall ++apply, that proxy's public statement of acceptance of any version is ++permanent authorization for you to choose that version for the ++Library. ++ diff --cc lib/lufa/Demos/Device/LowLevel/BulkVendor/WindowsDriver/x86/libusb0.sys index 000000000,000000000..5322e5b97 new file mode 100644 Binary files differ diff --cc lib/lufa/Demos/Device/LowLevel/BulkVendor/WindowsDriver/x86/libusb0_x86.dll index 000000000,000000000..6e475b90a new file mode 100644 Binary files differ diff --cc lib/lufa/Demos/Device/LowLevel/BulkVendor/asf.xml index 000000000,000000000..e87f33eb0 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/BulkVendor/asf.xml @@@ -1,0 -1,0 +1,61 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Bulk Vendor Device Demo (Low Level APIs)" id="lufa.demos.device.lowlevel.vendor.example.avr8"> ++ <require idref="lufa.demos.device.lowlevel.vendor"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <project caption="Bulk Vendor Device Demo (Low Level APIs)" id="lufa.demos.device.lowlevel.vendor.example.xmega"> ++ <require idref="lufa.demos.device.lowlevel.vendor"/> ++ <require idref="lufa.boards.dummy.xmega"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atxmega128a1u"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="32000000UL"/> ++ <build type="define" name="F_USB" value="48000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.device.lowlevel.vendor" caption="Bulk Vendor Device Demo (Low Level APIs)"> ++ <info type="description" value="summary"> ++ Bulk Vendor Device demo, implementing a basic USB device with vendor-specific endpoints for custom protocol implementations. This demo uses the Low Level LUFA APIs to manually implement a USB Class for demonstration purposes without using the simpler in-built LUFA Class Driver APIs. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Low Level APIs"/> ++ <keyword value="USB Device"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="BulkVendor.txt"/> ++ <build type="distribute" subtype="directory" value="HostTestApp"/> ++ <build type="distribute" subtype="directory" value="WindowsDriver"/> ++ ++ <build type="c-source" value="BulkVendor.c"/> ++ <build type="c-source" value="Descriptors.c"/> ++ <build type="header-file" value="BulkVendor.h"/> ++ <build type="header-file" value="Descriptors.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Device/LowLevel/BulkVendor/doxyfile index 000000000,000000000..7c307b094 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/BulkVendor/doxyfile @@@ -1,0 -1,0 +1,2397 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Bulk Vendor 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ \ ++ HostTestApp/ \ ++ WindowsDriver/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Device/LowLevel/BulkVendor/makefile index 000000000,000000000..17fd24ae1 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/BulkVendor/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = BulkVendor ++SRC = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Device/LowLevel/DualVirtualSerial/Config/LUFAConfig.h index 000000000,000000000..070eac471 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/DualVirtualSerial/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,126 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++ #define USB_DEVICE_ONLY ++// #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++ #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #elif (ARCH == ARCH_XMEGA) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_RC32MCLKSRC | USB_OPT_BUSEVENT_PRIHIGH) ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++ #define MAX_ENDPOINT_INDEX 6 ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Device/LowLevel/DualVirtualSerial/Descriptors.c index 000000000,000000000..553223a2b new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/DualVirtualSerial/Descriptors.c @@@ -1,0 -1,0 +1,360 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special ++ * computer-readable structures which the host requests upon device enumeration, to determine ++ * the device's capabilities and functions. ++ */ ++ ++#include "Descriptors.h" ++ ++ ++/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall ++ * device characteristics, including the supported USB version, control endpoint size and the ++ * number of device configurations. The descriptor is read out by the USB host when the enumeration ++ * process begins. ++ */ ++const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = ++{ ++ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, ++ ++ .USBSpecification = VERSION_BCD(1,1,0), ++ .Class = USB_CSCP_IADDeviceClass, ++ .SubClass = USB_CSCP_IADDeviceSubclass, ++ .Protocol = USB_CSCP_IADDeviceProtocol, ++ ++ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, ++ ++ .VendorID = 0x03EB, ++ .ProductID = 0x204E, ++ .ReleaseNumber = VERSION_BCD(0,0,1), ++ ++ .ManufacturerStrIndex = STRING_ID_Manufacturer, ++ .ProductStrIndex = STRING_ID_Product, ++ .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. ++ */ ++const 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 = 4, ++ ++ .ConfigurationNumber = 1, ++ .ConfigurationStrIndex = NO_DESCRIPTOR, ++ ++ .ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED), ++ ++ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) ++ }, ++ ++ .CDC1_IAD = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation}, ++ ++ .FirstInterfaceIndex = INTERFACE_ID_CDC1_CCI, ++ .TotalInterfaces = 2, ++ ++ .Class = CDC_CSCP_CDCClass, ++ .SubClass = CDC_CSCP_ACMSubclass, ++ .Protocol = CDC_CSCP_ATCommandProtocol, ++ ++ .IADStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .CDC1_CCI_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_CDC1_CCI, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 1, ++ ++ .Class = CDC_CSCP_CDCClass, ++ .SubClass = CDC_CSCP_ACMSubclass, ++ .Protocol = CDC_CSCP_ATCommandProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .CDC1_Functional_Header = ++ { ++ .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface}, ++ .Subtype = CDC_DSUBTYPE_CSInterface_Header, ++ ++ .CDCSpecification = VERSION_BCD(1,1,0), ++ }, ++ ++ .CDC1_Functional_ACM = ++ { ++ .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface}, ++ .Subtype = CDC_DSUBTYPE_CSInterface_ACM, ++ ++ .Capabilities = 0x06, ++ }, ++ ++ .CDC1_Functional_Union = ++ { ++ .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface}, ++ .Subtype = CDC_DSUBTYPE_CSInterface_Union, ++ ++ .MasterInterfaceNumber = INTERFACE_ID_CDC1_CCI, ++ .SlaveInterfaceNumber = INTERFACE_ID_CDC1_DCI, ++ }, ++ ++ .CDC1_ManagementEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = CDC1_NOTIFICATION_EPADDR, ++ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = CDC_NOTIFICATION_EPSIZE, ++ .PollingIntervalMS = 0xFF ++ }, ++ ++ .CDC1_DCI_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_CDC1_DCI, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 2, ++ ++ .Class = CDC_CSCP_CDCDataClass, ++ .SubClass = CDC_CSCP_NoDataSubclass, ++ .Protocol = CDC_CSCP_NoDataProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .CDC1_DataOutEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = CDC1_RX_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = CDC_TXRX_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++ ++ .CDC1_DataInEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = CDC1_TX_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = CDC_TXRX_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++ ++ .CDC2_IAD = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation}, ++ ++ .FirstInterfaceIndex = INTERFACE_ID_CDC2_CCI, ++ .TotalInterfaces = 2, ++ ++ .Class = CDC_CSCP_CDCClass, ++ .SubClass = CDC_CSCP_ACMSubclass, ++ .Protocol = CDC_CSCP_ATCommandProtocol, ++ ++ .IADStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .CDC2_CCI_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_CDC2_CCI, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 1, ++ ++ .Class = CDC_CSCP_CDCClass, ++ .SubClass = CDC_CSCP_ACMSubclass, ++ .Protocol = CDC_CSCP_ATCommandProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .CDC2_Functional_Header = ++ { ++ .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface}, ++ .Subtype = CDC_DSUBTYPE_CSInterface_Header, ++ ++ .CDCSpecification = VERSION_BCD(1,1,0), ++ }, ++ ++ .CDC2_Functional_ACM = ++ { ++ .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface}, ++ .Subtype = CDC_DSUBTYPE_CSInterface_ACM, ++ ++ .Capabilities = 0x06, ++ }, ++ ++ .CDC2_Functional_Union = ++ { ++ .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface}, ++ .Subtype = CDC_DSUBTYPE_CSInterface_Union, ++ ++ .MasterInterfaceNumber = INTERFACE_ID_CDC2_CCI, ++ .SlaveInterfaceNumber = INTERFACE_ID_CDC2_DCI, ++ }, ++ ++ .CDC2_ManagementEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = CDC2_NOTIFICATION_EPADDR, ++ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = CDC_NOTIFICATION_EPSIZE, ++ .PollingIntervalMS = 0xFF ++ }, ++ ++ .CDC2_DCI_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_CDC2_DCI, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 2, ++ ++ .Class = CDC_CSCP_CDCDataClass, ++ .SubClass = CDC_CSCP_NoDataSubclass, ++ .Protocol = CDC_CSCP_NoDataProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .CDC2_DataOutEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = CDC2_RX_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = CDC_TXRX_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++ ++ .CDC2_DataInEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = CDC2_TX_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = CDC_TXRX_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ } ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_String_t PROGMEM LanguageString = USB_STRING_DESCRIPTOR_ARRAY(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"LUFA Dual CDC 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 uint16_t wIndex, ++ const void** const DescriptorAddress) ++{ ++ const uint8_t DescriptorType = (wValue >> 8); ++ const uint8_t DescriptorNumber = (wValue & 0xFF); ++ ++ const void* Address = NULL; ++ uint16_t Size = NO_DESCRIPTOR; ++ ++ switch (DescriptorType) ++ { ++ case DTYPE_Device: ++ Address = &DeviceDescriptor; ++ Size = sizeof(USB_Descriptor_Device_t); ++ break; ++ case DTYPE_Configuration: ++ Address = &ConfigurationDescriptor; ++ Size = sizeof(USB_Descriptor_Configuration_t); ++ break; ++ case DTYPE_String: ++ switch (DescriptorNumber) ++ { ++ case STRING_ID_Language: ++ Address = &LanguageString; ++ Size = pgm_read_byte(&LanguageString.Header.Size); ++ break; ++ case STRING_ID_Manufacturer: ++ Address = &ManufacturerString; ++ Size = pgm_read_byte(&ManufacturerString.Header.Size); ++ break; ++ case STRING_ID_Product: ++ Address = &ProductString; ++ Size = pgm_read_byte(&ProductString.Header.Size); ++ break; ++ } ++ ++ break; ++ } ++ ++ *DescriptorAddress = Address; ++ return Size; ++} ++ diff --cc lib/lufa/Demos/Device/LowLevel/DualVirtualSerial/Descriptors.h index 000000000,000000000..f54fe9c36 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/DualVirtualSerial/Descriptors.h @@@ -1,0 -1,0 +1,135 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * Header file for Descriptors.c. ++ */ ++ ++#ifndef _DESCRIPTORS_H_ ++#define _DESCRIPTORS_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include <avr/pgmspace.h> ++ ++ /* Macros: */ ++ /** Endpoint address of the first CDC interface's device-to-host data IN endpoint. */ ++ #define CDC1_TX_EPADDR (ENDPOINT_DIR_IN | 1) ++ ++ /** Endpoint address of the first CDC interface's host-to-device data OUT endpoint. */ ++ #define CDC1_RX_EPADDR (ENDPOINT_DIR_OUT | 2) ++ ++ /** Endpoint address of the first CDC interface's device-to-host notification IN endpoint. */ ++ #define CDC1_NOTIFICATION_EPADDR (ENDPOINT_DIR_IN | 3) ++ ++ /** Endpoint address of the second CDC interface's device-to-host data IN endpoint. */ ++ #define CDC2_TX_EPADDR (ENDPOINT_DIR_IN | 4) ++ ++ /** Endpoint address of the second CDC interface's host-to-device data OUT endpoint. */ ++ #define CDC2_RX_EPADDR (ENDPOINT_DIR_OUT | 5) ++ ++ /** Endpoint address of the second CDC interface's device-to-host notification IN endpoint. */ ++ #define CDC2_NOTIFICATION_EPADDR (ENDPOINT_DIR_IN | 6) ++ ++ /** Size in bytes of the CDC device-to-host notification IN endpoints. */ ++ #define CDC_NOTIFICATION_EPSIZE 8 ++ ++ /** Size in bytes of the CDC data IN and OUT endpoints. */ ++ #define CDC_TXRX_EPSIZE 16 ++ ++ /* Type Defines: */ ++ /** Type define for the device configuration descriptor structure. This must be defined in the ++ * application code, as the configuration descriptor contains several sub-descriptors which ++ * vary between devices, and which describe the device's usage to the host. ++ */ ++ typedef struct ++ { ++ USB_Descriptor_Configuration_Header_t Config; ++ ++ // First CDC Control Interface ++ USB_Descriptor_Interface_Association_t CDC1_IAD; ++ USB_Descriptor_Interface_t CDC1_CCI_Interface; ++ USB_CDC_Descriptor_FunctionalHeader_t CDC1_Functional_Header; ++ USB_CDC_Descriptor_FunctionalACM_t CDC1_Functional_ACM; ++ USB_CDC_Descriptor_FunctionalUnion_t CDC1_Functional_Union; ++ USB_Descriptor_Endpoint_t CDC1_ManagementEndpoint; ++ ++ // First CDC Data Interface ++ USB_Descriptor_Interface_t CDC1_DCI_Interface; ++ USB_Descriptor_Endpoint_t CDC1_DataOutEndpoint; ++ USB_Descriptor_Endpoint_t CDC1_DataInEndpoint; ++ ++ // Second CDC Control Interface ++ USB_Descriptor_Interface_Association_t CDC2_IAD; ++ USB_Descriptor_Interface_t CDC2_CCI_Interface; ++ USB_CDC_Descriptor_FunctionalHeader_t CDC2_Functional_Header; ++ USB_CDC_Descriptor_FunctionalACM_t CDC2_Functional_ACM; ++ USB_CDC_Descriptor_FunctionalUnion_t CDC2_Functional_Union; ++ USB_Descriptor_Endpoint_t CDC2_ManagementEndpoint; ++ ++ // Second CDC Data Interface ++ USB_Descriptor_Interface_t CDC2_DCI_Interface; ++ USB_Descriptor_Endpoint_t CDC2_DataOutEndpoint; ++ USB_Descriptor_Endpoint_t CDC2_DataInEndpoint; ++ } USB_Descriptor_Configuration_t; ++ ++ /** Enum for the device interface descriptor IDs within the device. Each interface descriptor ++ * should have a unique ID index associated with it, which can be used to refer to the ++ * interface from other descriptors. ++ */ ++ enum InterfaceDescriptors_t ++ { ++ INTERFACE_ID_CDC1_CCI = 0, /**< CDC1 CCI interface descriptor ID */ ++ INTERFACE_ID_CDC1_DCI = 1, /**< CDC1 DCI interface descriptor ID */ ++ INTERFACE_ID_CDC2_CCI = 2, /**< CDC2 CCI interface descriptor ID */ ++ INTERFACE_ID_CDC2_DCI = 3, /**< CDC2 DCI interface descriptor ID */ ++ }; ++ ++ /** Enum for the device string descriptor IDs within the device. Each string descriptor should ++ * have a unique ID index associated with it, which can be used to refer to the string from ++ * other descriptors. ++ */ ++ enum StringDescriptors_t ++ { ++ STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */ ++ STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */ ++ STRING_ID_Product = 2, /**< Product string ID */ ++ }; ++ ++ /* Function Prototypes: */ ++ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ++ const uint16_t wIndex, ++ const void** const DescriptorAddress) ++ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/DualVirtualSerial/DualVirtualSerial.c index 000000000,000000000..b94a67dab new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/DualVirtualSerial/DualVirtualSerial.c @@@ -1,0 -1,0 +1,299 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 DualVirtualSerial demo. This file contains the main tasks of the demo and ++ * is responsible for the initial application hardware configuration. ++ */ ++ ++#include "DualVirtualSerial.h" ++ ++/** Contains the current baud rate and other settings of the first virtual serial port. While this demo does not use ++ * the physical USART and thus does not use these settings, they must still be retained and returned to the host ++ * upon request or the host will assume the device is non-functional. ++ * ++ * These values are set by the host via a class-specific request, however they are not required to be used accurately. ++ * It is possible to completely ignore these value or use other settings as the host is completely unaware of the physical ++ * serial link characteristics and instead sends and receives data in endpoint streams. ++ */ ++static CDC_LineEncoding_t LineEncoding1 = { .BaudRateBPS = 0, ++ .CharFormat = CDC_LINEENCODING_OneStopBit, ++ .ParityType = CDC_PARITY_None, ++ .DataBits = 8 }; ++ ++/** Contains the current baud rate and other settings of the second virtual serial port. While this demo does not use ++ * the physical USART and thus does not use these settings, they must still be retained and returned to the host ++ * upon request or the host will assume the device is non-functional. ++ * ++ * These values are set by the host via a class-specific request, however they are not required to be used accurately. ++ * It is possible to completely ignore these value or use other settings as the host is completely unaware of the physical ++ * serial link characteristics and instead sends and receives data in endpoint streams. ++ */ ++static CDC_LineEncoding_t LineEncoding2 = { .BaudRateBPS = 0, ++ .CharFormat = CDC_LINEENCODING_OneStopBit, ++ .ParityType = CDC_PARITY_None, ++ .DataBits = 8 }; ++ ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ CDC1_Task(); ++ CDC2_Task(); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#elif (ARCH == ARCH_XMEGA) ++ /* Start the PLL to multiply the 2MHz RC oscillator to 32MHz and switch the CPU core to run from it */ ++ XMEGACLK_StartPLL(CLOCK_SRC_INT_RC2MHZ, 2000000, F_CPU); ++ XMEGACLK_SetCPUClockSource(CLOCK_SRC_PLL); ++ ++ /* Start the 32MHz internal RC oscillator and start the DFLL to increase it to 48MHz using the USB SOF as a reference */ ++ XMEGACLK_StartInternalOscillator(CLOCK_SRC_INT_RC32MHZ); ++ XMEGACLK_StartDFLL(CLOCK_SRC_INT_RC32MHZ, DFLL_REF_INT_USBSOF, F_USB); ++ ++ PMIC.CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm; ++#endif ++ ++ /* Hardware Initialization */ ++ Joystick_Init(); ++ LEDs_Init(); ++ USB_Init(); ++} ++ ++/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and ++ * starts the library USB task to begin the enumeration and USB management process. ++ */ ++void EVENT_USB_Device_Connect(void) ++{ ++ /* Indicate USB enumerating */ ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via ++ * the status LEDs and stops the USB management and CDC management tasks. ++ */ ++void EVENT_USB_Device_Disconnect(void) ++{ ++ /* Indicate USB not ready */ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration ++ * of the USB device after enumeration - the device endpoints are configured and the CDC management tasks are started. ++ */ ++void EVENT_USB_Device_ConfigurationChanged(void) ++{ ++ bool ConfigSuccess = true; ++ ++ /* Setup first CDC Interface's Endpoints */ ++ ConfigSuccess &= Endpoint_ConfigureEndpoint(CDC1_TX_EPADDR, EP_TYPE_BULK, CDC_TXRX_EPSIZE, 1); ++ ConfigSuccess &= Endpoint_ConfigureEndpoint(CDC1_RX_EPADDR, EP_TYPE_BULK, CDC_TXRX_EPSIZE, 1); ++ ConfigSuccess &= Endpoint_ConfigureEndpoint(CDC1_NOTIFICATION_EPADDR, EP_TYPE_INTERRUPT, CDC_NOTIFICATION_EPSIZE, 1); ++ ++ /* Setup second CDC Interface's Endpoints */ ++ ConfigSuccess &= Endpoint_ConfigureEndpoint(CDC2_TX_EPADDR, EP_TYPE_BULK, CDC_TXRX_EPSIZE, 1); ++ ConfigSuccess &= Endpoint_ConfigureEndpoint(CDC2_RX_EPADDR, EP_TYPE_BULK, CDC_TXRX_EPSIZE, 1); ++ ConfigSuccess &= Endpoint_ConfigureEndpoint(CDC2_NOTIFICATION_EPADDR, EP_TYPE_INTERRUPT, CDC_NOTIFICATION_EPSIZE, 1); ++ ++ /* Reset line encoding baud rates so that the host knows to send new values */ ++ LineEncoding1.BaudRateBPS = 0; ++ LineEncoding2.BaudRateBPS = 0; ++ ++ /* Indicate endpoint configuration success or failure */ ++ LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); ++} ++ ++/** Event handler for the USB_ControlRequest event. This is used to catch and process control requests sent to ++ * the device from the USB host before passing along unhandled control requests to the library for processing ++ * internally. ++ */ ++void EVENT_USB_Device_ControlRequest(void) ++{ ++ /* Determine which interface's Line Coding data is being set from the wIndex parameter */ ++ void* LineEncodingData = (USB_ControlRequest.wIndex == 0) ? &LineEncoding1 : &LineEncoding2; ++ ++ /* Process CDC specific control requests */ ++ switch (USB_ControlRequest.bRequest) ++ { ++ case CDC_REQ_GetLineEncoding: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) ++ { ++ Endpoint_ClearSETUP(); ++ ++ /* Write the line coding data to the control endpoint */ ++ Endpoint_Write_Control_Stream_LE(LineEncodingData, sizeof(CDC_LineEncoding_t)); ++ Endpoint_ClearOUT(); ++ } ++ ++ break; ++ case CDC_REQ_SetLineEncoding: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) ++ { ++ Endpoint_ClearSETUP(); ++ ++ /* Read the line coding data in from the host into the global struct */ ++ Endpoint_Read_Control_Stream_LE(LineEncodingData, sizeof(CDC_LineEncoding_t)); ++ Endpoint_ClearIN(); ++ } ++ ++ break; ++ case CDC_REQ_SetControlLineState: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) ++ { ++ Endpoint_ClearSETUP(); ++ Endpoint_ClearStatusStage(); ++ } ++ ++ break; ++ } ++} ++ ++/** Function to manage CDC data transmission and reception to and from the host for the first CDC interface, which sends joystick ++ * movements to the host as ASCII strings. ++ */ ++void CDC1_Task(void) ++{ ++ char* ReportString = NULL; ++ uint8_t JoyStatus_LCL = Joystick_GetStatus(); ++ static bool ActionSent = false; ++ ++ /* Device must be connected and configured for the task to run */ ++ if (USB_DeviceState != DEVICE_STATE_Configured) ++ return; ++ ++ /* Determine if a joystick action has occurred */ ++ 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; ++ ++ /* Flag management - Only allow one string to be sent per action */ ++ if ((ReportString != NULL) && (ActionSent == false) && LineEncoding1.BaudRateBPS) ++ { ++ ActionSent = true; ++ ++ /* Select the Serial Tx Endpoint */ ++ Endpoint_SelectEndpoint(CDC1_TX_EPADDR); ++ ++ /* Write the String to the Endpoint */ ++ Endpoint_Write_Stream_LE(ReportString, strlen(ReportString), NULL); ++ ++ /* Finalize the stream transfer to send the last packet */ ++ Endpoint_ClearIN(); ++ ++ /* Wait until the endpoint is ready for another packet */ ++ Endpoint_WaitUntilReady(); ++ ++ /* Send an empty packet to ensure that the host does not buffer data sent to it */ ++ Endpoint_ClearIN(); ++ } ++ ++ /* Select the Serial Rx Endpoint */ ++ Endpoint_SelectEndpoint(CDC1_RX_EPADDR); ++ ++ /* Throw away any received data from the host */ ++ if (Endpoint_IsOUTReceived()) ++ Endpoint_ClearOUT(); ++} ++ ++/** Function to manage CDC data transmission and reception to and from the host for the second CDC interface, which echoes back ++ * all data sent to it from the host. ++ */ ++void CDC2_Task(void) ++{ ++ /* Device must be connected and configured for the task to run */ ++ if (USB_DeviceState != DEVICE_STATE_Configured) ++ return; ++ ++ /* Select the Serial Rx Endpoint */ ++ Endpoint_SelectEndpoint(CDC2_RX_EPADDR); ++ ++ /* Check to see if any data has been received */ ++ if (Endpoint_IsOUTReceived()) ++ { ++ /* Create a temp buffer big enough to hold the incoming endpoint packet */ ++ uint8_t Buffer[Endpoint_BytesInEndpoint()]; ++ ++ /* Remember how large the incoming packet is */ ++ uint16_t DataLength = Endpoint_BytesInEndpoint(); ++ ++ /* Read in the incoming packet into the buffer */ ++ Endpoint_Read_Stream_LE(&Buffer, DataLength, NULL); ++ ++ /* Finalize the stream transfer to send the last packet */ ++ Endpoint_ClearOUT(); ++ ++ /* Select the Serial Tx Endpoint */ ++ Endpoint_SelectEndpoint(CDC2_TX_EPADDR); ++ ++ /* Write the received data to the endpoint */ ++ Endpoint_Write_Stream_LE(&Buffer, DataLength, NULL); ++ ++ /* Finalize the stream transfer to send the last packet */ ++ Endpoint_ClearIN(); ++ ++ /* Wait until the endpoint is ready for the next packet */ ++ Endpoint_WaitUntilReady(); ++ ++ /* Send an empty packet to prevent host buffering */ ++ Endpoint_ClearIN(); ++ } ++} ++ diff --cc lib/lufa/Demos/Device/LowLevel/DualVirtualSerial/DualVirtualSerial.h index 000000000,000000000..56a510b7a new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/DualVirtualSerial/DualVirtualSerial.h @@@ -1,0 -1,0 +1,77 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 DualVirtualSerial.c. ++ */ ++ ++#ifndef _DUAL_VIRTUALSERIAL_H_ ++#define _DUAL_VIRTUALSERIAL_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <string.h> ++ ++ #include "Descriptors.h" ++ ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Drivers/Board/Joystick.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Platform/Platform.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 CDC1_Task(void); ++ void CDC2_Task(void); ++ void SetupHardware(void); ++ ++ void EVENT_USB_Device_Connect(void); ++ void EVENT_USB_Device_Disconnect(void); ++ void EVENT_USB_Device_ConfigurationChanged(void); ++ void EVENT_USB_Device_ControlRequest(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/DualVirtualSerial/DualVirtualSerial.txt index 000000000,000000000..fb763b7a2 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/DualVirtualSerial/DualVirtualSerial.txt @@@ -1,0 -1,0 +1,89 @@@ ++/** \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 Dual Communications Device Class (Dual Virtual Serial Port) Device ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * \li Series 6 USB AVRs (AT90USBxxx6) ++ * \li Series 4 USB AVRs (ATMEGAxxU4) ++ * \li Series AU XMEGA AVRs (ATXMEGAxxxAxU) ++ * \li Series B XMEGA AVRs (ATXMEGAxxxBx) ++ * \li Series C XMEGA AVRs (ATXMEGAxxxCx) ++ * ++ * \section Sec_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> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>Abstract Control Model (ACM)</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF CDC Class Standard</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF Interface Association Descriptor ECN \n ++ * USBIF CDC Class Standard</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Dual Communications Device Class demonstration application. ++ * This gives a simple reference application for implementing ++ * a compound device with dual CDC functions acting as a pair ++ * of virtual serial ports. This demo uses Interface Association ++ * Descriptors to link together the pair of related CDC ++ * descriptors for each virtual serial port, which may not be ++ * supported in all OSes - Windows Vista is supported, as is ++ * XP (although the latter may need a hotfix to function). ++ * ++ * Joystick actions are transmitted to the host as strings ++ * through the first serial port. The device does not respond to ++ * serial data sent from the host in the first serial port. ++ * ++ * The second serial port echoes back 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 Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Device/LowLevel/DualVirtualSerial/LUFA DualVirtualSerial.inf index 000000000,000000000..1a0e0248a new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/DualVirtualSerial/LUFA DualVirtualSerial.inf @@@ -1,0 -1,0 +1,66 @@@ ++;************************************************************ ++; Windows USB CDC ACM Setup File ++; Copyright (c) 2000 Microsoft Corporation ++;************************************************************ ++ ++[DefaultInstall] ++CopyINF="LUFA DualVirtualSerial.inf" ++ ++[Version] ++Signature="$Windows NT$" ++Class=Ports ++ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} ++Provider=%MFGNAME% ++DriverVer=7/1/2012,10.0.0.0 ++ ++[Manufacturer] ++%MFGNAME%=DeviceList, NTx86, NTamd64, NTia64 ++ ++[SourceDisksNames] ++ ++[SourceDisksFiles] ++ ++[DestinationDirs] ++DefaultDestDir=12 ++ ++[DriverInstall] ++Include=mdmcpq.inf ++CopyFiles=FakeModemCopyFileSection ++AddReg=DriverInstall.AddReg ++ ++[DriverInstall.Services] ++Include=mdmcpq.inf ++AddService=usbser, 0x00000002, LowerFilter_Service_Inst ++ ++[DriverInstall.AddReg] ++HKR,,EnumPropPages32,,"msports.dll,SerialPortPropPageProvider" ++ ++;------------------------------------------------------------------------------ ++; 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. ++;------------------------------------------------------------------------------ ++[DeviceList] ++%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_204E&MI_00, USB\VID_03EB&PID_204E&MI_02 ++ ++[DeviceList.NTx86] ++%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_204E&MI_00, USB\VID_03EB&PID_204E&MI_02 ++ ++[DeviceList.NTamd64] ++%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_204E&MI_00, USB\VID_03EB&PID_204E&MI_02 ++ ++[DeviceList.NTia64] ++%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_204E&MI_00, USB\VID_03EB&PID_204E&MI_02 ++ ++;------------------------------------------------------------------------------ ++; String Definitions ++;------------------------------------------------------------------------------ ++;Modify these strings to customize your device ++;------------------------------------------------------------------------------ ++[Strings] ++MFGNAME="http://www.lufa-lib.org" ++DESCRIPTION="LUFA CDC-ACM Virtual Serial Port" diff --cc lib/lufa/Demos/Device/LowLevel/DualVirtualSerial/asf.xml index 000000000,000000000..133d1b4f8 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/DualVirtualSerial/asf.xml @@@ -1,0 -1,0 +1,62 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Dual Virtual Serial Device Demo (Low Level APIs)" id="lufa.demos.device.lowlevel.dual_cdc.example.avr8"> ++ <require idref="lufa.demos.device.lowlevel.dual_cdc"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <project caption="Dual Virtual Serial Device Demo (Low Level APIs)" id="lufa.demos.device.lowlevel.dual_cdc.example.xmega"> ++ <require idref="lufa.demos.device.lowlevel.dual_cdc"/> ++ <require idref="lufa.boards.dummy.xmega"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atxmega128a1u"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="32000000UL"/> ++ <build type="define" name="F_USB" value="48000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.device.lowlevel.dual_cdc" caption="Dual Virtual Serial Device Demo (Low Level APIs)"> ++ <info type="description" value="summary"> ++ Dual Virtual Serial (CDC) demo, implementing a pair of virtual serial port interfaces. This demo uses the Low Level LUFA APIs to manually implement a USB Class for demonstration purposes without using the simpler in-built LUFA Class Driver APIs. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Low Level APIs"/> ++ <keyword value="USB Device"/> ++ <keyword value="CDC Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="DualVirtualSerial.txt"/> ++ <build type="distribute" subtype="user-file" value="LUFA DualVirtualSerial.inf"/> ++ ++ <build type="c-source" value="DualVirtualSerial.c"/> ++ <build type="c-source" value="Descriptors.c"/> ++ <build type="header-file" value="DualVirtualSerial.h"/> ++ <build type="header-file" value="Descriptors.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ <require idref="lufa.drivers.board.joystick"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Device/LowLevel/DualVirtualSerial/doxyfile index 000000000,000000000..40dcfe915 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/DualVirtualSerial/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Dual Virtual Serial 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Device/LowLevel/DualVirtualSerial/makefile index 000000000,000000000..c91ec4f88 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/DualVirtualSerial/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = DualVirtualSerial ++SRC = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Device/LowLevel/GenericHID/Config/AppConfig.h index 000000000,000000000..636200ec6 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/GenericHID/Config/AppConfig.h @@@ -1,0 -1,0 +1,48 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief Application Configuration Header File ++ * ++ * This is a header file which is be used to configure some of ++ * the application's compile time options, as an alternative to ++ * specifying the compile time constants supplied through a ++ * makefile or build system. ++ * ++ * For information on what each token does, refer to the ++ * \ref Sec_Options section of the application documentation. ++ */ ++ ++#ifndef _APP_CONFIG_H_ ++#define _APP_CONFIG_H_ ++ ++ #define GENERIC_REPORT_SIZE 8 ++ ++#endif diff --cc lib/lufa/Demos/Device/LowLevel/GenericHID/Config/LUFAConfig.h index 000000000,000000000..00eefc7bf new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/GenericHID/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,126 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++ #define USB_DEVICE_ONLY ++// #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #elif (ARCH == ARCH_XMEGA) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_RC32MCLKSRC | USB_OPT_BUSEVENT_PRIHIGH) ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++ #define MAX_ENDPOINT_INDEX 2 ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Device/LowLevel/GenericHID/Descriptors.c index 000000000,000000000..2a248075a new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/GenericHID/Descriptors.c @@@ -1,0 -1,0 +1,238 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special ++ * computer-readable structures which the host requests upon device enumeration, to determine ++ * the device's capabilities and functions. ++ */ ++ ++#include "Descriptors.h" ++ ++/** HID class report descriptor. This is a special descriptor constructed with values from the ++ * USBIF HID class specification to describe the reports and capabilities of the HID device. This ++ * descriptor is parsed by the host and its contents used to determine what data (and in what encoding) ++ * the device will send, and what it may be sent back from the host. Refer to the HID specification for ++ * more details on HID report descriptors. ++ */ ++const USB_Descriptor_HIDReport_Datatype_t PROGMEM GenericReport[] = ++{ ++ HID_RI_USAGE_PAGE(16, 0xFF00), /* Vendor Page 0 */ ++ HID_RI_USAGE(8, 0x01), /* Vendor Usage 1 */ ++ HID_RI_COLLECTION(8, 0x01), /* Vendor Usage 1 */ ++ HID_RI_USAGE(8, 0x02), /* Vendor Usage 2 */ ++ HID_RI_LOGICAL_MINIMUM(8, 0x00), ++ HID_RI_LOGICAL_MAXIMUM(8, 0xFF), ++ HID_RI_REPORT_SIZE(8, 0x08), ++ HID_RI_REPORT_COUNT(8, GENERIC_REPORT_SIZE), ++ HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), ++ HID_RI_USAGE(8, 0x03), /* Vendor Usage 3 */ ++ HID_RI_LOGICAL_MINIMUM(8, 0x00), ++ HID_RI_LOGICAL_MAXIMUM(8, 0xFF), ++ HID_RI_REPORT_SIZE(8, 0x08), ++ HID_RI_REPORT_COUNT(8, GENERIC_REPORT_SIZE), ++ HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE), ++ HID_RI_END_COLLECTION(0), ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = ++{ ++ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, ++ ++ .USBSpecification = VERSION_BCD(1,1,0), ++ .Class = USB_CSCP_NoDeviceClass, ++ .SubClass = USB_CSCP_NoDeviceSubclass, ++ .Protocol = USB_CSCP_NoDeviceProtocol, ++ ++ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, ++ ++ .VendorID = 0x03EB, ++ .ProductID = 0x204F, ++ .ReleaseNumber = VERSION_BCD(0,0,1), ++ ++ .ManufacturerStrIndex = STRING_ID_Manufacturer, ++ .ProductStrIndex = STRING_ID_Product, ++ .SerialNumStrIndex = NO_DESCRIPTOR, ++ ++ .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. ++ */ ++const 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 = 1, ++ ++ .ConfigurationNumber = 1, ++ .ConfigurationStrIndex = NO_DESCRIPTOR, ++ ++ .ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED), ++ ++ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) ++ }, ++ ++ .HID_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_GenericHID, ++ .AlternateSetting = 0x00, ++ ++ .TotalEndpoints = 2, ++ ++ .Class = HID_CSCP_HIDClass, ++ .SubClass = HID_CSCP_NonBootSubclass, ++ .Protocol = HID_CSCP_NonBootProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .HID_GenericHID = ++ { ++ .Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID}, ++ ++ .HIDSpec = VERSION_BCD(1,1,1), ++ .CountryCode = 0x00, ++ .TotalReportDescriptors = 1, ++ .HIDReportType = HID_DTYPE_Report, ++ .HIDReportLength = sizeof(GenericReport) ++ }, ++ ++ .HID_ReportINEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = GENERIC_IN_EPADDR, ++ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = GENERIC_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++ ++ .HID_ReportOUTEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = GENERIC_OUT_EPADDR, ++ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = GENERIC_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ } ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_String_t PROGMEM LanguageString = USB_STRING_DESCRIPTOR_ARRAY(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"LUFA Generic HID 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 uint16_t wIndex, ++ const void** const DescriptorAddress) ++{ ++ const uint8_t DescriptorType = (wValue >> 8); ++ const uint8_t DescriptorNumber = (wValue & 0xFF); ++ ++ const void* Address = NULL; ++ uint16_t Size = NO_DESCRIPTOR; ++ ++ switch (DescriptorType) ++ { ++ case DTYPE_Device: ++ Address = &DeviceDescriptor; ++ Size = sizeof(USB_Descriptor_Device_t); ++ break; ++ case DTYPE_Configuration: ++ Address = &ConfigurationDescriptor; ++ Size = sizeof(USB_Descriptor_Configuration_t); ++ break; ++ case DTYPE_String: ++ switch (DescriptorNumber) ++ { ++ case STRING_ID_Language: ++ Address = &LanguageString; ++ Size = pgm_read_byte(&LanguageString.Header.Size); ++ break; ++ case STRING_ID_Manufacturer: ++ Address = &ManufacturerString; ++ Size = pgm_read_byte(&ManufacturerString.Header.Size); ++ break; ++ case STRING_ID_Product: ++ Address = &ProductString; ++ Size = pgm_read_byte(&ProductString.Header.Size); ++ break; ++ } ++ ++ break; ++ case HID_DTYPE_HID: ++ Address = &ConfigurationDescriptor.HID_GenericHID; ++ Size = sizeof(USB_HID_Descriptor_HID_t); ++ break; ++ case HID_DTYPE_Report: ++ Address = &GenericReport; ++ Size = sizeof(GenericReport); ++ break; ++ } ++ ++ *DescriptorAddress = Address; ++ return Size; ++} ++ diff --cc lib/lufa/Demos/Device/LowLevel/GenericHID/Descriptors.h index 000000000,000000000..30fc7e1ea new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/GenericHID/Descriptors.h @@@ -1,0 -1,0 +1,99 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * Header file for Descriptors.c. ++ */ ++ ++#ifndef _DESCRIPTORS_H_ ++#define _DESCRIPTORS_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include <avr/pgmspace.h> ++ ++ #include "Config/AppConfig.h" ++ ++ /* 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; ++ ++ // Generic HID Interface ++ USB_Descriptor_Interface_t HID_Interface; ++ USB_HID_Descriptor_HID_t HID_GenericHID; ++ USB_Descriptor_Endpoint_t HID_ReportINEndpoint; ++ USB_Descriptor_Endpoint_t HID_ReportOUTEndpoint; ++ } USB_Descriptor_Configuration_t; ++ ++ /** Enum for the device interface descriptor IDs within the device. Each interface descriptor ++ * should have a unique ID index associated with it, which can be used to refer to the ++ * interface from other descriptors. ++ */ ++ enum InterfaceDescriptors_t ++ { ++ INTERFACE_ID_GenericHID = 0, /**< GenericHID interface descriptor ID */ ++ }; ++ ++ /** Enum for the device string descriptor IDs within the device. Each string descriptor should ++ * have a unique ID index associated with it, which can be used to refer to the string from ++ * other descriptors. ++ */ ++ enum StringDescriptors_t ++ { ++ STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */ ++ STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */ ++ STRING_ID_Product = 2, /**< Product string ID */ ++ }; ++ ++ /* Macros: */ ++ /** Endpoint address of the Generic HID reporting IN endpoint. */ ++ #define GENERIC_IN_EPADDR (ENDPOINT_DIR_IN | 1) ++ ++ /** Endpoint address of the Generic HID reporting OUT endpoint. */ ++ #define GENERIC_OUT_EPADDR (ENDPOINT_DIR_OUT | 2) ++ ++ /** Size in bytes of the Generic HID reporting endpoint. */ ++ #define GENERIC_EPSIZE 8 ++ ++ /* Function Prototypes: */ ++ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ++ const uint16_t wIndex, ++ const void** const DescriptorAddress) ++ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/GenericHID/GenericHID.c index 000000000,000000000..916457a2f new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/GenericHID/GenericHID.c @@@ -1,0 -1,0 +1,253 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 GenericHID demo. This file contains the main tasks of the demo and ++ * is responsible for the initial application hardware configuration. ++ */ ++ ++#include "GenericHID.h" ++ ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ HID_Task(); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#elif (ARCH == ARCH_XMEGA) ++ /* Start the PLL to multiply the 2MHz RC oscillator to 32MHz and switch the CPU core to run from it */ ++ XMEGACLK_StartPLL(CLOCK_SRC_INT_RC2MHZ, 2000000, F_CPU); ++ XMEGACLK_SetCPUClockSource(CLOCK_SRC_PLL); ++ ++ /* Start the 32MHz internal RC oscillator and start the DFLL to increase it to 48MHz using the USB SOF as a reference */ ++ XMEGACLK_StartInternalOscillator(CLOCK_SRC_INT_RC32MHZ); ++ XMEGACLK_StartDFLL(CLOCK_SRC_INT_RC32MHZ, DFLL_REF_INT_USBSOF, F_USB); ++ ++ PMIC.CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm; ++#endif ++ ++ /* Hardware Initialization */ ++ LEDs_Init(); ++ USB_Init(); ++} ++ ++/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and ++ * starts the library USB task to begin the enumeration and USB management process. ++ */ ++void EVENT_USB_Device_Connect(void) ++{ ++ /* Indicate USB enumerating */ ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via ++ * the status LEDs and stops the USB management task. ++ */ ++void EVENT_USB_Device_Disconnect(void) ++{ ++ /* Indicate USB not ready */ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_ConfigurationChanged event. This is fired when the host sets the current configuration ++ * of the USB device after enumeration, and configures the generic HID device endpoints. ++ */ ++void EVENT_USB_Device_ConfigurationChanged(void) ++{ ++ bool ConfigSuccess = true; ++ ++ /* Setup HID Report Endpoints */ ++ ConfigSuccess &= Endpoint_ConfigureEndpoint(GENERIC_IN_EPADDR, EP_TYPE_INTERRUPT, GENERIC_EPSIZE, 1); ++ ConfigSuccess &= Endpoint_ConfigureEndpoint(GENERIC_OUT_EPADDR, EP_TYPE_INTERRUPT, GENERIC_EPSIZE, 1); ++ ++ /* Indicate endpoint configuration success or failure */ ++ LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); ++} ++ ++/** Event handler for the USB_ControlRequest event. This is used to catch and process control requests sent to ++ * the device from the USB host before passing along unhandled control requests to the library for processing ++ * internally. ++ */ ++void EVENT_USB_Device_ControlRequest(void) ++{ ++ /* Handle HID Class specific requests */ ++ switch (USB_ControlRequest.bRequest) ++ { ++ case HID_REQ_GetReport: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) ++ { ++ uint8_t GenericData[GENERIC_REPORT_SIZE]; ++ CreateGenericHIDReport(GenericData); ++ ++ Endpoint_ClearSETUP(); ++ ++ /* Write the report data to the control endpoint */ ++ Endpoint_Write_Control_Stream_LE(&GenericData, sizeof(GenericData)); ++ Endpoint_ClearOUT(); ++ } ++ ++ break; ++ case HID_REQ_SetReport: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) ++ { ++ uint8_t GenericData[GENERIC_REPORT_SIZE]; ++ ++ Endpoint_ClearSETUP(); ++ ++ /* Read the report data from the control endpoint */ ++ Endpoint_Read_Control_Stream_LE(&GenericData, sizeof(GenericData)); ++ Endpoint_ClearIN(); ++ ++ ProcessGenericHIDReport(GenericData); ++ } ++ ++ break; ++ } ++} ++ ++/** Function to process the last received report from the host. ++ * ++ * \param[in] DataArray Pointer to a buffer where the last received report has been stored ++ */ ++void ProcessGenericHIDReport(uint8_t* DataArray) ++{ ++ /* ++ This is where you need to process reports sent from the host to the device. This ++ function is called each time the host has sent a new report. DataArray is an array ++ holding the report sent from the host. ++ */ ++ ++ uint8_t NewLEDMask = LEDS_NO_LEDS; ++ ++ if (DataArray[0]) ++ NewLEDMask |= LEDS_LED1; ++ ++ if (DataArray[1]) ++ NewLEDMask |= LEDS_LED2; ++ ++ if (DataArray[2]) ++ NewLEDMask |= LEDS_LED3; ++ ++ if (DataArray[3]) ++ NewLEDMask |= LEDS_LED4; ++ ++ LEDs_SetAllLEDs(NewLEDMask); ++} ++ ++/** Function to create the next report to send back to the host at the next reporting interval. ++ * ++ * \param[out] DataArray Pointer to a buffer where the next report data should be stored ++ */ ++void CreateGenericHIDReport(uint8_t* DataArray) ++{ ++ /* ++ This is where you need to create reports to be sent to the host from the device. This ++ function is called each time the host is ready to accept a new report. DataArray is ++ an array to hold the report to the host. ++ */ ++ ++ uint8_t CurrLEDMask = LEDs_GetLEDs(); ++ ++ DataArray[0] = ((CurrLEDMask & LEDS_LED1) ? 1 : 0); ++ DataArray[1] = ((CurrLEDMask & LEDS_LED2) ? 1 : 0); ++ DataArray[2] = ((CurrLEDMask & LEDS_LED3) ? 1 : 0); ++ DataArray[3] = ((CurrLEDMask & LEDS_LED4) ? 1 : 0); ++} ++ ++void HID_Task(void) ++{ ++ /* Device must be connected and configured for the task to run */ ++ if (USB_DeviceState != DEVICE_STATE_Configured) ++ return; ++ ++ Endpoint_SelectEndpoint(GENERIC_OUT_EPADDR); ++ ++ /* Check to see if a packet has been sent from the host */ ++ if (Endpoint_IsOUTReceived()) ++ { ++ /* Check to see if the packet contains data */ ++ if (Endpoint_IsReadWriteAllowed()) ++ { ++ /* Create a temporary buffer to hold the read in report from the host */ ++ uint8_t GenericData[GENERIC_REPORT_SIZE]; ++ ++ /* Read Generic Report Data */ ++ Endpoint_Read_Stream_LE(&GenericData, sizeof(GenericData), NULL); ++ ++ /* Process Generic Report Data */ ++ ProcessGenericHIDReport(GenericData); ++ } ++ ++ /* Finalize the stream transfer to send the last packet */ ++ Endpoint_ClearOUT(); ++ } ++ ++ Endpoint_SelectEndpoint(GENERIC_IN_EPADDR); ++ ++ /* Check to see if the host is ready to accept another packet */ ++ if (Endpoint_IsINReady()) ++ { ++ /* Create a temporary buffer to hold the report to send to the host */ ++ uint8_t GenericData[GENERIC_REPORT_SIZE]; ++ ++ /* Create Generic Report Data */ ++ CreateGenericHIDReport(GenericData); ++ ++ /* Write Generic Report Data */ ++ Endpoint_Write_Stream_LE(&GenericData, sizeof(GenericData), NULL); ++ ++ /* Finalize the stream transfer to send the last packet */ ++ Endpoint_ClearIN(); ++ } ++} ++ diff --cc lib/lufa/Demos/Device/LowLevel/GenericHID/GenericHID.h index 000000000,000000000..4e6100c43 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/GenericHID/GenericHID.h @@@ -1,0 -1,0 +1,81 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 GenericHID.c. ++ */ ++ ++#ifndef _GENERICHID_H_ ++#define _GENERICHID_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <stdbool.h> ++ #include <string.h> ++ ++ #include "Descriptors.h" ++ #include "Config/AppConfig.h" ++ ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Platform/Platform.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 HID_Task(void); ++ ++ void EVENT_USB_Device_Connect(void); ++ void EVENT_USB_Device_Disconnect(void); ++ void EVENT_USB_Device_ConfigurationChanged(void); ++ void EVENT_USB_Device_ControlRequest(void); ++ void EVENT_USB_Device_StartOfFrame(void); ++ ++ void ProcessGenericHIDReport(uint8_t* DataArray); ++ void CreateGenericHIDReport(uint8_t* DataArray); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/GenericHID/GenericHID.txt index 000000000,000000000..0d780f49d new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/GenericHID/GenericHID.txt @@@ -1,0 -1,0 +1,79 @@@ ++/** \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 Generic HID Device ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * \li Series 6 USB AVRs (AT90USBxxx6) ++ * \li Series 4 USB AVRs (ATMEGAxxU4) ++ * \li Series 2 USB AVRs (AT90USBxx2, ATMEGAxxU2) ++ * \li Series AU XMEGA AVRs (ATXMEGAxxxAxU) ++ * \li Series B XMEGA AVRs (ATXMEGAxxxBx) ++ * \li Series C XMEGA AVRs (ATXMEGAxxxCx) ++ * ++ * \section Sec_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>Human Interface Device (HID)</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>N/A</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF HID Specification \n ++ * USBIF HID Usage Tables</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Low Speed Mode \n ++ * Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Generic HID device demonstration application. This gives a simple reference application ++ * for implementing a generic HID device, using the basic USB HID drivers in all modern ++ * OSes (i.e. no special drivers required). By default it accepts and sends up to 8 byte reports ++ * to and from a USB Host, and transmits the last sent report back to the host. ++ * ++ * On start-up the system will automatically enumerate and function as a vendor HID device. ++ * When controlled by a custom HID class application, reports can be sent and received by ++ * both the standard data endpoint and control request methods defined in the HID specification. ++ * ++ * \section Sec_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> ++ * <th><b>Define Name:</b></th> ++ * <th><b>Location:</b></th> ++ * <th><b>Description:</b></th> ++ * </tr> ++ * <tr> ++ * <td>GENERIC_REPORT_SIZE</td> ++ * <td>AppConfig.h</td> ++ * <td>This token defines the size of the device reports, both sent and received (including report ID byte). The value ++ * must be an integer ranging from 1 to 255.</td> ++ * </tr> ++ * </table> ++ */ ++ diff --cc lib/lufa/Demos/Device/LowLevel/GenericHID/HostTestApp/test_generic_hid.py index 000000000,000000000..1e5f43019 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/GenericHID/HostTestApp/test_generic_hid.py @@@ -1,0 -1,0 +1,96 @@@ ++""" ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++""" ++ ++""" ++ LUFA Generic HID device demo host test script. This script will send a ++ continuous stream of generic reports to the device, to show a variable LED ++ pattern on the target board. Send and received report data is printed to ++ the terminal. ++ ++ Requires the pywinusb library (https://pypi.python.org/pypi/pywinusb/). ++""" ++ ++import sys ++from time import sleep ++import pywinusb.hid as hid ++ ++# Generic HID device VID, PID and report payload length (length is increased ++# by one to account for the Report ID byte that must be pre-pended) ++device_vid = 0x03EB ++device_pid = 0x204F ++report_length = 1 + 8 ++ ++ ++def get_hid_device_handle(): ++ hid_device_filter = hid.HidDeviceFilter(vendor_id=device_vid, ++ product_id=device_pid) ++ ++ valid_hid_devices = hid_device_filter.get_devices() ++ ++ if len(valid_hid_devices) is 0: ++ return None ++ else: ++ return valid_hid_devices[0] ++ ++ ++def send_led_pattern(device, led1, led2, led3, led4): ++ # Report data for the demo is the report ID (always zero) followed by the ++ # LED on/off data ++ report_data = [0, led1, led2, led3, led4] ++ ++ # Zero-extend the array to the length the report should be ++ report_data.extend([0] * (report_length - len(report_data))) ++ ++ # Send the generated report to the device ++ device.send_output_report(report_data) ++ ++ print("Sent LED Pattern: {0}".format(report_data[1:5])) ++ ++ ++def received_led_pattern(report_data): ++ print("Received LED Pattern: {0}".format(report_data[1:5])) ++ ++ ++def main(): ++ hid_device = get_hid_device_handle() ++ ++ if hid_device is None: ++ print("No valid HID device found.") ++ sys.exit(1) ++ ++ try: ++ hid_device.open() ++ ++ print("Connected to device 0x%04X/0x%04X - %s [%s]" % ++ (hid_device.vendor_id, hid_device.product_id, ++ hid_device.product_name, hid_device.vendor_name)) ++ ++ # Set up the HID input report handler to receive reports ++ hid_device.set_raw_data_handler(received_led_pattern) ++ ++ p = 0 ++ while (hid_device.is_plugged()): ++ # Convert the current pattern index to a bit-mask and send ++ send_led_pattern(hid_device, ++ (p >> 3) & 1, ++ (p >> 2) & 1, ++ (p >> 1) & 1, ++ (p >> 0) & 1) ++ ++ # Compute next LED pattern in sequence ++ p = (p + 1) % 16 ++ ++ # Delay a bit for visual effect ++ sleep(.2) ++ ++ finally: ++ hid_device.close() ++ ++ ++if __name__ == '__main__': ++ main() diff --cc lib/lufa/Demos/Device/LowLevel/GenericHID/asf.xml index 000000000,000000000..cf1fb8009 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/GenericHID/asf.xml @@@ -1,0 -1,0 +1,63 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Generic HID Device Demo (Low Level APIs)" id="lufa.demos.device.lowlevel.generic_hid.example.avr8"> ++ <require idref="lufa.demos.device.lowlevel.generic_hid"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <project caption="Generic HID Device Demo (Low Level APIs)" id="lufa.demos.device.lowlevel.generic_hid.example.xmega"> ++ <require idref="lufa.demos.device.lowlevel.generic_hid"/> ++ <require idref="lufa.boards.dummy.xmega"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atxmega128a1u"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="32000000UL"/> ++ <build type="define" name="F_USB" value="48000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.device.lowlevel.generic_hid" caption="Generic HID Device Demo (Low Level APIs)"> ++ <info type="description" value="summary"> ++ Generic HID device demo, implementing a device whose LEDs can be controlled via HID messages from the host. This demo uses the Low Level LUFA APIs to manually implement a USB Class for demonstration purposes without using the simpler in-built LUFA Class Driver APIs. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Low Level APIs"/> ++ <keyword value="USB Device"/> ++ <keyword value="HID Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="GenericHID.txt"/> ++ <build type="distribute" subtype="directory" value="HostTestApp"/> ++ ++ <build type="c-source" value="GenericHID.c"/> ++ <build type="c-source" value="Descriptors.c"/> ++ <build type="header-file" value="GenericHID.h"/> ++ <build type="header-file" value="Descriptors.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="module-config" subtype="required-header-file" value="AppConfig.h"/> ++ <build type="header-file" value="Config/AppConfig.h"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Device/LowLevel/GenericHID/doxyfile index 000000000,000000000..ffc0d0590 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/GenericHID/doxyfile @@@ -1,0 -1,0 +1,2396 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Generic HID 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ \ ++ HostTestApp/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Device/LowLevel/GenericHID/makefile index 000000000,000000000..7cd0aac47 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/GenericHID/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = GenericHID ++SRC = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Device/LowLevel/Joystick/Config/LUFAConfig.h index 000000000,000000000..299d2ec85 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/Joystick/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,126 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++ #define USB_DEVICE_ONLY ++// #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #elif (ARCH == ARCH_XMEGA) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_RC32MCLKSRC | USB_OPT_BUSEVENT_PRIHIGH) ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++ #define MAX_ENDPOINT_INDEX 1 ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Device/LowLevel/Joystick/Descriptors.c index 000000000,000000000..45949897c new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/Joystick/Descriptors.c @@@ -1,0 -1,0 +1,240 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special ++ * computer-readable structures which the host requests upon device enumeration, to determine ++ * the device's capabilities and functions. ++ */ ++ ++#include "Descriptors.h" ++ ++/** HID class report descriptor. This is a special descriptor constructed with values from the ++ * USBIF HID class specification to describe the reports and capabilities of the HID device. This ++ * descriptor is parsed by the host and its contents used to determine what data (and in what encoding) ++ * the device will send, and what it may be sent back from the host. Refer to the HID specification for ++ * more details on HID report descriptors. ++ */ ++const USB_Descriptor_HIDReport_Datatype_t PROGMEM JoystickReport[] = ++{ ++ HID_RI_USAGE_PAGE(8, 0x01), /* Generic Desktop */ ++ HID_RI_USAGE(8, 0x04), /* Joystick */ ++ HID_RI_COLLECTION(8, 0x01), /* Application */ ++ HID_RI_USAGE(8, 0x01), /* Pointer */ ++ HID_RI_COLLECTION(8, 0x00), /* Physical */ ++ HID_RI_USAGE(8, 0x30), /* Usage X */ ++ HID_RI_USAGE(8, 0x31), /* Usage Y */ ++ HID_RI_USAGE(8, 0x32), /* Usage Z */ ++ HID_RI_LOGICAL_MINIMUM(8, -100), ++ HID_RI_LOGICAL_MAXIMUM(8, 100), ++ HID_RI_PHYSICAL_MINIMUM(8, -1), ++ HID_RI_PHYSICAL_MAXIMUM(8, 1), ++ HID_RI_REPORT_COUNT(8, 0x03), ++ HID_RI_REPORT_SIZE(8, 0x08), ++ HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), ++ HID_RI_END_COLLECTION(0), ++ HID_RI_USAGE_PAGE(8, 0x09), /* Button */ ++ HID_RI_USAGE_MINIMUM(8, 0x01), ++ HID_RI_USAGE_MAXIMUM(8, 0x02), ++ HID_RI_LOGICAL_MINIMUM(8, 0x00), ++ HID_RI_LOGICAL_MAXIMUM(8, 0x01), ++ HID_RI_REPORT_SIZE(8, 0x01), ++ HID_RI_REPORT_COUNT(8, 0x02), ++ HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), ++ HID_RI_REPORT_SIZE(8, 0x06), ++ HID_RI_REPORT_COUNT(8, 0x01), ++ HID_RI_INPUT(8, HID_IOF_CONSTANT), ++ HID_RI_END_COLLECTION(0), ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = ++{ ++ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, ++ ++ .USBSpecification = VERSION_BCD(1,1,0), ++ .Class = USB_CSCP_NoDeviceClass, ++ .SubClass = USB_CSCP_NoDeviceSubclass, ++ .Protocol = USB_CSCP_NoDeviceProtocol, ++ ++ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, ++ ++ .VendorID = 0x03EB, ++ .ProductID = 0x2043, ++ .ReleaseNumber = VERSION_BCD(0,0,1), ++ ++ .ManufacturerStrIndex = STRING_ID_Manufacturer, ++ .ProductStrIndex = STRING_ID_Product, ++ .SerialNumStrIndex = NO_DESCRIPTOR, ++ ++ .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. ++ */ ++const 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 = 1, ++ ++ .ConfigurationNumber = 1, ++ .ConfigurationStrIndex = NO_DESCRIPTOR, ++ ++ .ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED), ++ ++ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) ++ }, ++ ++ .HID_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_Joystick, ++ .AlternateSetting = 0x00, ++ ++ .TotalEndpoints = 1, ++ ++ .Class = HID_CSCP_HIDClass, ++ .SubClass = HID_CSCP_NonBootSubclass, ++ .Protocol = HID_CSCP_NonBootProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .HID_JoystickHID = ++ { ++ .Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID}, ++ ++ .HIDSpec = VERSION_BCD(1,1,1), ++ .CountryCode = 0x00, ++ .TotalReportDescriptors = 1, ++ .HIDReportType = HID_DTYPE_Report, ++ .HIDReportLength = sizeof(JoystickReport) ++ }, ++ ++ .HID_ReportINEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = JOYSTICK_EPADDR, ++ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = JOYSTICK_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ } ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_String_t PROGMEM LanguageString = USB_STRING_DESCRIPTOR_ARRAY(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"LUFA Joystick 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 uint16_t wIndex, ++ const void** const DescriptorAddress) ++{ ++ const uint8_t DescriptorType = (wValue >> 8); ++ const uint8_t DescriptorNumber = (wValue & 0xFF); ++ ++ const void* Address = NULL; ++ uint16_t Size = NO_DESCRIPTOR; ++ ++ switch (DescriptorType) ++ { ++ case DTYPE_Device: ++ Address = &DeviceDescriptor; ++ Size = sizeof(USB_Descriptor_Device_t); ++ break; ++ case DTYPE_Configuration: ++ Address = &ConfigurationDescriptor; ++ Size = sizeof(USB_Descriptor_Configuration_t); ++ break; ++ case DTYPE_String: ++ switch (DescriptorNumber) ++ { ++ case STRING_ID_Language: ++ Address = &LanguageString; ++ Size = pgm_read_byte(&LanguageString.Header.Size); ++ break; ++ case STRING_ID_Manufacturer: ++ Address = &ManufacturerString; ++ Size = pgm_read_byte(&ManufacturerString.Header.Size); ++ break; ++ case STRING_ID_Product: ++ Address = &ProductString; ++ Size = pgm_read_byte(&ProductString.Header.Size); ++ break; ++ } ++ ++ break; ++ case DTYPE_HID: ++ Address = &ConfigurationDescriptor.HID_JoystickHID; ++ Size = sizeof(USB_HID_Descriptor_HID_t); ++ break; ++ case DTYPE_Report: ++ Address = &JoystickReport; ++ Size = sizeof(JoystickReport); ++ break; ++ } ++ ++ *DescriptorAddress = Address; ++ return Size; ++} ++ diff --cc lib/lufa/Demos/Device/LowLevel/Joystick/Descriptors.h index 000000000,000000000..30ab1059b new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/Joystick/Descriptors.h @@@ -1,0 -1,0 +1,99 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * Header file for Descriptors.c. ++ */ ++ ++#ifndef _DESCRIPTORS_H_ ++#define _DESCRIPTORS_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include <avr/pgmspace.h> ++ ++ /* 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; ++ ++ // Joystick HID Interface ++ USB_Descriptor_Interface_t HID_Interface; ++ USB_HID_Descriptor_HID_t HID_JoystickHID; ++ USB_Descriptor_Endpoint_t HID_ReportINEndpoint; ++ } USB_Descriptor_Configuration_t; ++ ++ /** Enum for the device interface descriptor IDs within the device. Each interface descriptor ++ * should have a unique ID index associated with it, which can be used to refer to the ++ * interface from other descriptors. ++ */ ++ enum InterfaceDescriptors_t ++ { ++ INTERFACE_ID_Joystick = 0, /**< Joystick interface descriptor ID */ ++ }; ++ ++ /** Enum for the device string descriptor IDs within the device. Each string descriptor should ++ * have a unique ID index associated with it, which can be used to refer to the string from ++ * other descriptors. ++ */ ++ enum StringDescriptors_t ++ { ++ STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */ ++ STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */ ++ STRING_ID_Product = 2, /**< Product string ID */ ++ }; ++ ++ /* Macros: */ ++ /** Endpoint address of the Joystick HID reporting IN endpoint. */ ++ #define JOYSTICK_EPADDR (ENDPOINT_DIR_IN | 1) ++ ++ /** Size in bytes of the Joystick HID reporting IN endpoint. */ ++ #define JOYSTICK_EPSIZE 8 ++ ++ /** Descriptor header type value, to indicate a HID class HID descriptor. */ ++ #define DTYPE_HID 0x21 ++ ++ /** Descriptor header type value, to indicate a HID class HID report descriptor. */ ++ #define DTYPE_Report 0x22 ++ ++ /* Function Prototypes: */ ++ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ++ const uint16_t wIndex, ++ const void** const DescriptorAddress) ++ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/Joystick/Joystick.c index 000000000,000000000..7536d1a5f new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/Joystick/Joystick.c @@@ -1,0 -1,0 +1,217 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 Joystick demo. This file contains the main tasks of the demo and ++ * is responsible for the initial application hardware configuration. ++ */ ++ ++#include "Joystick.h" ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ HID_Task(); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#elif (ARCH == ARCH_XMEGA) ++ /* Start the PLL to multiply the 2MHz RC oscillator to 32MHz and switch the CPU core to run from it */ ++ XMEGACLK_StartPLL(CLOCK_SRC_INT_RC2MHZ, 2000000, F_CPU); ++ XMEGACLK_SetCPUClockSource(CLOCK_SRC_PLL); ++ ++ /* Start the 32MHz internal RC oscillator and start the DFLL to increase it to 48MHz using the USB SOF as a reference */ ++ XMEGACLK_StartInternalOscillator(CLOCK_SRC_INT_RC32MHZ); ++ XMEGACLK_StartDFLL(CLOCK_SRC_INT_RC32MHZ, DFLL_REF_INT_USBSOF, F_USB); ++ ++ PMIC.CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm; ++#endif ++ ++ /* Hardware Initialization */ ++ Joystick_Init(); ++ LEDs_Init(); ++ Buttons_Init(); ++ USB_Init(); ++} ++ ++/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and ++ * starts the library USB task to begin the enumeration and USB management process. ++ */ ++void EVENT_USB_Device_Connect(void) ++{ ++ /* Indicate USB enumerating */ ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via ++ * the status LEDs and stops the USB management and joystick reporting tasks. ++ */ ++void EVENT_USB_Device_Disconnect(void) ++{ ++ /* Indicate USB not ready */ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration ++ * of the USB device after enumeration - the device endpoints are configured and the joystick reporting task started. ++ */ ++void EVENT_USB_Device_ConfigurationChanged(void) ++{ ++ bool ConfigSuccess = true; ++ ++ /* Setup HID Report Endpoint */ ++ ConfigSuccess &= Endpoint_ConfigureEndpoint(JOYSTICK_EPADDR, EP_TYPE_INTERRUPT, JOYSTICK_EPSIZE, 1); ++ ++ /* Indicate endpoint configuration success or failure */ ++ LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); ++} ++ ++/** Event handler for the USB_ControlRequest event. This is used to catch and process control requests sent to ++ * the device from the USB host before passing along unhandled control requests to the library for processing ++ * internally. ++ */ ++void EVENT_USB_Device_ControlRequest(void) ++{ ++ /* Handle HID Class specific requests */ ++ switch (USB_ControlRequest.bRequest) ++ { ++ case HID_REQ_GetReport: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) ++ { ++ USB_JoystickReport_Data_t JoystickReportData; ++ ++ /* Create the next HID report to send to the host */ ++ GetNextReport(&JoystickReportData); ++ ++ Endpoint_ClearSETUP(); ++ ++ /* Write the report data to the control endpoint */ ++ Endpoint_Write_Control_Stream_LE(&JoystickReportData, sizeof(JoystickReportData)); ++ Endpoint_ClearOUT(); ++ } ++ ++ break; ++ } ++} ++ ++/** Fills the given HID report data structure with the next HID report to send to the host. ++ * ++ * \param[out] ReportData Pointer to a HID report data structure to be filled ++ * ++ * \return Boolean \c true if the new report differs from the last report, \c false otherwise ++ */ ++bool GetNextReport(USB_JoystickReport_Data_t* const ReportData) ++{ ++ static uint8_t PrevJoyStatus = 0; ++ static uint8_t PrevButtonStatus = 0; ++ uint8_t JoyStatus_LCL = Joystick_GetStatus(); ++ uint8_t ButtonStatus_LCL = Buttons_GetStatus(); ++ bool InputChanged = false; ++ ++ /* Clear the report contents */ ++ memset(ReportData, 0, sizeof(USB_JoystickReport_Data_t)); ++ ++ if (JoyStatus_LCL & JOY_UP) ++ ReportData->Y = -100; ++ else if (JoyStatus_LCL & JOY_DOWN) ++ ReportData->Y = 100; ++ ++ if (JoyStatus_LCL & JOY_LEFT) ++ ReportData->X = -100; ++ else if (JoyStatus_LCL & JOY_RIGHT) ++ ReportData->X = 100; ++ ++ if (JoyStatus_LCL & JOY_PRESS) ++ ReportData->Button |= (1 << 1); ++ ++ if (ButtonStatus_LCL & BUTTONS_BUTTON1) ++ ReportData->Button |= (1 << 0); ++ ++ /* Check if the new report is different to the previous report */ ++ InputChanged = (uint8_t)(PrevJoyStatus ^ JoyStatus_LCL) | (uint8_t)(PrevButtonStatus ^ ButtonStatus_LCL); ++ ++ /* Save the current joystick status for later comparison */ ++ PrevJoyStatus = JoyStatus_LCL; ++ PrevButtonStatus = ButtonStatus_LCL; ++ ++ /* Return whether the new report is different to the previous report or not */ ++ return InputChanged; ++} ++ ++/** Function to manage HID report generation and transmission to the host. */ ++void HID_Task(void) ++{ ++ /* Device must be connected and configured for the task to run */ ++ if (USB_DeviceState != DEVICE_STATE_Configured) ++ return; ++ ++ /* Select the Joystick Report Endpoint */ ++ Endpoint_SelectEndpoint(JOYSTICK_EPADDR); ++ ++ /* Check to see if the host is ready for another packet */ ++ if (Endpoint_IsINReady()) ++ { ++ USB_JoystickReport_Data_t JoystickReportData; ++ ++ /* Create the next HID report to send to the host */ ++ GetNextReport(&JoystickReportData); ++ ++ /* Write Joystick Report Data */ ++ Endpoint_Write_Stream_LE(&JoystickReportData, sizeof(JoystickReportData), NULL); ++ ++ /* Finalize the stream transfer to send the last packet */ ++ Endpoint_ClearIN(); ++ ++ /* Clear the report data afterwards */ ++ memset(&JoystickReportData, 0, sizeof(JoystickReportData)); ++ } ++} ++ diff --cc lib/lufa/Demos/Device/LowLevel/Joystick/Joystick.h index 000000000,000000000..d5fdcccbd new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/Joystick/Joystick.h @@@ -1,0 -1,0 +1,91 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 Joystick.c. ++ */ ++ ++#ifndef _JOYSTICK_H_ ++#define _JOYSTICK_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <string.h> ++ ++ #include "Descriptors.h" ++ ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Drivers/Board/Joystick.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/Board/Buttons.h> ++ #include <LUFA/Platform/Platform.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) ++ ++ /* Type Defines: */ ++ /** Type define for the joystick HID report structure, for creating and sending HID reports to the host PC. ++ * This mirrors the layout described to the host in the HID report descriptor, in Descriptors.c. ++ */ ++ typedef struct ++ { ++ int8_t X; /**< Current absolute joystick X position, as a signed 8-bit integer */ ++ int8_t Y; /**< Current absolute joystick Y position, as a signed 8-bit integer */ ++ int8_t Z; /**< Current absolute joystick Z position, as a signed 8-bit integer */ ++ uint8_t Button; /**< Bit mask of the currently pressed joystick buttons */ ++ } USB_JoystickReport_Data_t; ++ ++ /* Function Prototypes: */ ++ void SetupHardware(void); ++ void HID_Task(void); ++ ++ void EVENT_USB_Device_Connect(void); ++ void EVENT_USB_Device_Disconnect(void); ++ void EVENT_USB_Device_ConfigurationChanged(void); ++ void EVENT_USB_Device_ControlRequest(void); ++ ++ bool GetNextReport(USB_JoystickReport_Data_t* const ReportData); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/Joystick/Joystick.txt index 000000000,000000000..b174642f4 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/Joystick/Joystick.txt @@@ -1,0 -1,0 +1,77 @@@ ++/** \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 Joystick Device Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * \li Series 6 USB AVRs (AT90USBxxx6) ++ * \li Series 4 USB AVRs (ATMEGAxxU4) ++ * \li Series 2 USB AVRs (AT90USBxx2, ATMEGAxxU2) ++ * \li Series AU XMEGA AVRs (ATXMEGAxxxAxU) ++ * \li Series B XMEGA AVRs (ATXMEGAxxxBx) ++ * \li Series C XMEGA AVRs (ATXMEGAxxxCx) ++ * ++ * \section Sec_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>Human Interface Device (HID)</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>N/A</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF HID Specification \n ++ * USBIF HID Usage Tables</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Low Speed Mode \n ++ * Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Joystick demonstration application. This gives a simple reference ++ * application for implementing a USB Keyboard device, for USB Joysticks ++ * using the standard Keyboard HID profile. ++ * ++ * This device will show up as a generic joystick device, with two buttons. ++ * Pressing the joystick inwards is the first button, and the HWB button ++ * is the second. ++ * ++ * Moving the joystick on the selected board moves the joystick location on ++ * the host computer. ++ * ++ * Currently only single interface joysticks are supported. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Device/LowLevel/Joystick/asf.xml index 000000000,000000000..d37741bac new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/Joystick/asf.xml @@@ -1,0 -1,0 +1,62 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Joystick HID Device Demo (Low Level APIs)" id="lufa.demos.device.lowlevel.joystick.example.avr8"> ++ <require idref="lufa.demos.device.lowlevel.joystick"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <project caption="Joystick HID Device Demo (Low Level APIs)" id="lufa.demos.device.lowlevel.joystick.example.xmega"> ++ <require idref="lufa.demos.device.lowlevel.joystick"/> ++ <require idref="lufa.boards.dummy.xmega"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atxmega128a1u"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="32000000UL"/> ++ <build type="define" name="F_USB" value="48000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.device.lowlevel.joystick" caption="Joystick HID Device Demo (Low Level APIs)"> ++ <info type="description" value="summary"> ++ Joystick HID device demo, implementing a basic USB joystick that can send movement information to the host. This demo uses the Low Level LUFA APIs to manually implement a USB Class for demonstration purposes without using the simpler in-built LUFA Class Driver APIs. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Low Level APIs"/> ++ <keyword value="USB Device"/> ++ <keyword value="HID Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="Joystick.txt"/> ++ ++ <build type="c-source" value="Joystick.c"/> ++ <build type="c-source" value="Descriptors.c"/> ++ <build type="header-file" value="Joystick.h"/> ++ <build type="header-file" value="Descriptors.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ <require idref="lufa.drivers.board.buttons"/> ++ <require idref="lufa.drivers.board.joystick"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Device/LowLevel/Joystick/doxyfile index 000000000,000000000..45ebd1341 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/Joystick/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Joystick 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Device/LowLevel/Joystick/makefile index 000000000,000000000..8a29ff4d0 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/Joystick/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = Joystick ++SRC = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Device/LowLevel/Keyboard/Config/LUFAConfig.h index 000000000,000000000..00eefc7bf new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/Keyboard/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,126 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++ #define USB_DEVICE_ONLY ++// #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #elif (ARCH == ARCH_XMEGA) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_RC32MCLKSRC | USB_OPT_BUSEVENT_PRIHIGH) ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++ #define MAX_ENDPOINT_INDEX 2 ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Device/LowLevel/Keyboard/Descriptors.c index 000000000,000000000..d0e5bc445 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/Keyboard/Descriptors.c @@@ -1,0 -1,0 +1,255 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ Copyright 2010 Denver Gingerich (denver [at] ossguy [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special ++ * computer-readable structures which the host requests upon device enumeration, to determine ++ * the device's capabilities and functions. ++ */ ++ ++#include "Descriptors.h" ++ ++/** HID class report descriptor. This is a special descriptor constructed with values from the ++ * USBIF HID class specification to describe the reports and capabilities of the HID device. This ++ * descriptor is parsed by the host and its contents used to determine what data (and in what encoding) ++ * the device will send, and what it may be sent back from the host. Refer to the HID specification for ++ * more details on HID report descriptors. ++ */ ++const USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] = ++{ ++ HID_RI_USAGE_PAGE(8, 0x01), /* Generic Desktop */ ++ HID_RI_USAGE(8, 0x06), /* Keyboard */ ++ HID_RI_COLLECTION(8, 0x01), /* Application */ ++ HID_RI_USAGE_PAGE(8, 0x07), /* Key Codes */ ++ HID_RI_USAGE_MINIMUM(8, 0xE0), /* Keyboard Left Control */ ++ HID_RI_USAGE_MAXIMUM(8, 0xE7), /* Keyboard Right GUI */ ++ HID_RI_LOGICAL_MINIMUM(8, 0x00), ++ HID_RI_LOGICAL_MAXIMUM(8, 0x01), ++ HID_RI_REPORT_SIZE(8, 0x01), ++ HID_RI_REPORT_COUNT(8, 0x08), ++ HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), ++ HID_RI_REPORT_COUNT(8, 0x01), ++ HID_RI_REPORT_SIZE(8, 0x08), ++ HID_RI_INPUT(8, HID_IOF_CONSTANT), ++ HID_RI_USAGE_PAGE(8, 0x08), /* LEDs */ ++ HID_RI_USAGE_MINIMUM(8, 0x01), /* Num Lock */ ++ HID_RI_USAGE_MAXIMUM(8, 0x05), /* Kana */ ++ HID_RI_REPORT_COUNT(8, 0x05), ++ HID_RI_REPORT_SIZE(8, 0x01), ++ HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE), ++ HID_RI_REPORT_COUNT(8, 0x01), ++ HID_RI_REPORT_SIZE(8, 0x03), ++ HID_RI_OUTPUT(8, HID_IOF_CONSTANT), ++ HID_RI_LOGICAL_MINIMUM(8, 0x00), ++ HID_RI_LOGICAL_MAXIMUM(8, 0x65), ++ HID_RI_USAGE_PAGE(8, 0x07), /* Keyboard */ ++ HID_RI_USAGE_MINIMUM(8, 0x00), /* Reserved (no event indicated) */ ++ HID_RI_USAGE_MAXIMUM(8, 0x65), /* Keyboard Application */ ++ HID_RI_REPORT_COUNT(8, 0x06), ++ HID_RI_REPORT_SIZE(8, 0x08), ++ HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE), ++ HID_RI_END_COLLECTION(0), ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = ++{ ++ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, ++ ++ .USBSpecification = VERSION_BCD(1,1,0), ++ .Class = USB_CSCP_NoDeviceClass, ++ .SubClass = USB_CSCP_NoDeviceSubclass, ++ .Protocol = USB_CSCP_NoDeviceProtocol, ++ ++ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, ++ ++ .VendorID = 0x03EB, ++ .ProductID = 0x2042, ++ .ReleaseNumber = VERSION_BCD(0,0,1), ++ ++ .ManufacturerStrIndex = STRING_ID_Manufacturer, ++ .ProductStrIndex = STRING_ID_Product, ++ .SerialNumStrIndex = NO_DESCRIPTOR, ++ ++ .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. ++ */ ++const 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 = 1, ++ ++ .ConfigurationNumber = 1, ++ .ConfigurationStrIndex = NO_DESCRIPTOR, ++ ++ .ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED), ++ ++ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) ++ }, ++ ++ .HID_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_Keyboard, ++ .AlternateSetting = 0x00, ++ ++ .TotalEndpoints = 2, ++ ++ .Class = HID_CSCP_HIDClass, ++ .SubClass = HID_CSCP_BootSubclass, ++ .Protocol = HID_CSCP_KeyboardBootProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .HID_KeyboardHID = ++ { ++ .Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID}, ++ ++ .HIDSpec = VERSION_BCD(1,1,1), ++ .CountryCode = 0x00, ++ .TotalReportDescriptors = 1, ++ .HIDReportType = HID_DTYPE_Report, ++ .HIDReportLength = sizeof(KeyboardReport) ++ }, ++ ++ .HID_ReportINEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = KEYBOARD_IN_EPADDR, ++ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = KEYBOARD_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++ ++ .HID_ReportOUTEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = KEYBOARD_OUT_EPADDR, ++ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = KEYBOARD_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ } ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_String_t PROGMEM LanguageString = USB_STRING_DESCRIPTOR_ARRAY(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"LUFA Keyboard 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 uint16_t wIndex, ++ const void** const DescriptorAddress) ++{ ++ const uint8_t DescriptorType = (wValue >> 8); ++ const uint8_t DescriptorNumber = (wValue & 0xFF); ++ ++ const void* Address = NULL; ++ uint16_t Size = NO_DESCRIPTOR; ++ ++ switch (DescriptorType) ++ { ++ case DTYPE_Device: ++ Address = &DeviceDescriptor; ++ Size = sizeof(USB_Descriptor_Device_t); ++ break; ++ case DTYPE_Configuration: ++ Address = &ConfigurationDescriptor; ++ Size = sizeof(USB_Descriptor_Configuration_t); ++ break; ++ case DTYPE_String: ++ switch (DescriptorNumber) ++ { ++ case STRING_ID_Language: ++ Address = &LanguageString; ++ Size = pgm_read_byte(&LanguageString.Header.Size); ++ break; ++ case STRING_ID_Manufacturer: ++ Address = &ManufacturerString; ++ Size = pgm_read_byte(&ManufacturerString.Header.Size); ++ break; ++ case STRING_ID_Product: ++ Address = &ProductString; ++ Size = pgm_read_byte(&ProductString.Header.Size); ++ break; ++ } ++ ++ break; ++ case HID_DTYPE_HID: ++ Address = &ConfigurationDescriptor.HID_KeyboardHID; ++ Size = sizeof(USB_HID_Descriptor_HID_t); ++ break; ++ case HID_DTYPE_Report: ++ Address = &KeyboardReport; ++ Size = sizeof(KeyboardReport); ++ break; ++ } ++ ++ *DescriptorAddress = Address; ++ return Size; ++} ++ diff --cc lib/lufa/Demos/Device/LowLevel/Keyboard/Descriptors.h index 000000000,000000000..f9d26e482 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/Keyboard/Descriptors.h @@@ -1,0 -1,0 +1,98 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ Copyright 2010 Denver Gingerich (denver [at] ossguy [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * Header file for Descriptors.c. ++ */ ++ ++#ifndef _DESCRIPTORS_H_ ++#define _DESCRIPTORS_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include <avr/pgmspace.h> ++ ++ /* 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; ++ ++ // Keyboard HID Interface ++ USB_Descriptor_Interface_t HID_Interface; ++ USB_HID_Descriptor_HID_t HID_KeyboardHID; ++ USB_Descriptor_Endpoint_t HID_ReportINEndpoint; ++ USB_Descriptor_Endpoint_t HID_ReportOUTEndpoint; ++ } USB_Descriptor_Configuration_t; ++ ++ /** Enum for the device interface descriptor IDs within the device. Each interface descriptor ++ * should have a unique ID index associated with it, which can be used to refer to the ++ * interface from other descriptors. ++ */ ++ enum InterfaceDescriptors_t ++ { ++ INTERFACE_ID_Keyboard = 0, /**< Keyboard interface descriptor ID */ ++ }; ++ ++ /** Enum for the device string descriptor IDs within the device. Each string descriptor should ++ * have a unique ID index associated with it, which can be used to refer to the string from ++ * other descriptors. ++ */ ++ enum StringDescriptors_t ++ { ++ STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */ ++ STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */ ++ STRING_ID_Product = 2, /**< Product string ID */ ++ }; ++ ++ /* Macros: */ ++ /** Endpoint address of the Keyboard HID reporting IN endpoint. */ ++ #define KEYBOARD_IN_EPADDR (ENDPOINT_DIR_IN | 1) ++ ++ /** Endpoint address of the Keyboard HID reporting OUT endpoint. */ ++ #define KEYBOARD_OUT_EPADDR (ENDPOINT_DIR_OUT | 2) ++ ++ /** Size in bytes of the Keyboard HID reporting IN and OUT endpoints. */ ++ #define KEYBOARD_EPSIZE 8 ++ ++ /* Function Prototypes: */ ++ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ++ const uint16_t wIndex, ++ const void** const DescriptorAddress) ++ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/Keyboard/Keyboard.c index 000000000,000000000..c412991e8 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/Keyboard/Keyboard.c @@@ -1,0 -1,0 +1,383 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ Copyright 2010 Denver Gingerich (denver [at] ossguy [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 Keyboard demo. This file contains the main tasks of the demo and ++ * is responsible for the initial application hardware configuration. ++ */ ++ ++#include "Keyboard.h" ++ ++/** Indicates what report mode the host has requested, true for normal HID reporting mode, \c false for special boot ++ * protocol reporting mode. ++ */ ++static bool UsingReportProtocol = true; ++ ++/** Current Idle period. This is set by the host via a Set Idle HID class request to silence the device's reports ++ * for either the entire idle duration, or until the report status changes (e.g. the user presses a key). ++ */ ++static uint16_t IdleCount = 500; ++ ++/** Current Idle period remaining. When the IdleCount value is set, this tracks the remaining number of idle ++ * milliseconds. This is separate to the IdleCount timer and is incremented and compared as the host may request ++ * the current idle period via a Get Idle HID class request, thus its value must be preserved. ++ */ ++static uint16_t IdleMSRemaining = 0; ++ ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ HID_Task(); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#elif (ARCH == ARCH_XMEGA) ++ /* Start the PLL to multiply the 2MHz RC oscillator to 32MHz and switch the CPU core to run from it */ ++ XMEGACLK_StartPLL(CLOCK_SRC_INT_RC2MHZ, 2000000, F_CPU); ++ XMEGACLK_SetCPUClockSource(CLOCK_SRC_PLL); ++ ++ /* Start the 32MHz internal RC oscillator and start the DFLL to increase it to 48MHz using the USB SOF as a reference */ ++ XMEGACLK_StartInternalOscillator(CLOCK_SRC_INT_RC32MHZ); ++ XMEGACLK_StartDFLL(CLOCK_SRC_INT_RC32MHZ, DFLL_REF_INT_USBSOF, F_USB); ++ ++ PMIC.CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm; ++#endif ++ ++ /* Hardware Initialization */ ++ Joystick_Init(); ++ LEDs_Init(); ++ USB_Init(); ++ Buttons_Init(); ++} ++ ++/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and ++ * starts the library USB task to begin the enumeration and USB management process. ++ */ ++void EVENT_USB_Device_Connect(void) ++{ ++ /* Indicate USB enumerating */ ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++ ++ /* Default to report protocol on connect */ ++ UsingReportProtocol = true; ++} ++ ++/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via ++ * the status LEDs. ++ */ ++void EVENT_USB_Device_Disconnect(void) ++{ ++ /* Indicate USB not ready */ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_ConfigurationChanged event. This is fired when the host sets the current configuration ++ * of the USB device after enumeration, and configures the keyboard device endpoints. ++ */ ++void EVENT_USB_Device_ConfigurationChanged(void) ++{ ++ bool ConfigSuccess = true; ++ ++ /* Setup HID Report Endpoints */ ++ ConfigSuccess &= Endpoint_ConfigureEndpoint(KEYBOARD_IN_EPADDR, EP_TYPE_INTERRUPT, KEYBOARD_EPSIZE, 1); ++ ConfigSuccess &= Endpoint_ConfigureEndpoint(KEYBOARD_OUT_EPADDR, EP_TYPE_INTERRUPT, KEYBOARD_EPSIZE, 1); ++ ++ /* Turn on Start-of-Frame events for tracking HID report period expiry */ ++ USB_Device_EnableSOFEvents(); ++ ++ /* Indicate endpoint configuration success or failure */ ++ LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); ++} ++ ++/** Event handler for the USB_ControlRequest event. This is used to catch and process control requests sent to ++ * the device from the USB host before passing along unhandled control requests to the library for processing ++ * internally. ++ */ ++void EVENT_USB_Device_ControlRequest(void) ++{ ++ /* Handle HID Class specific requests */ ++ switch (USB_ControlRequest.bRequest) ++ { ++ case HID_REQ_GetReport: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) ++ { ++ USB_KeyboardReport_Data_t KeyboardReportData; ++ ++ /* Create the next keyboard report for transmission to the host */ ++ CreateKeyboardReport(&KeyboardReportData); ++ ++ Endpoint_ClearSETUP(); ++ ++ /* Write the report data to the control endpoint */ ++ Endpoint_Write_Control_Stream_LE(&KeyboardReportData, sizeof(KeyboardReportData)); ++ Endpoint_ClearOUT(); ++ } ++ ++ break; ++ case HID_REQ_SetReport: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) ++ { ++ Endpoint_ClearSETUP(); ++ ++ /* Wait until the LED report has been sent by the host */ ++ while (!(Endpoint_IsOUTReceived())) ++ { ++ if (USB_DeviceState == DEVICE_STATE_Unattached) ++ return; ++ } ++ ++ /* Read in the LED report from the host */ ++ uint8_t LEDStatus = Endpoint_Read_8(); ++ ++ Endpoint_ClearOUT(); ++ Endpoint_ClearStatusStage(); ++ ++ /* Process the incoming LED report */ ++ ProcessLEDReport(LEDStatus); ++ } ++ ++ break; ++ case HID_REQ_GetProtocol: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) ++ { ++ Endpoint_ClearSETUP(); ++ ++ /* Write the current protocol flag to the host */ ++ Endpoint_Write_8(UsingReportProtocol); ++ ++ Endpoint_ClearIN(); ++ Endpoint_ClearStatusStage(); ++ } ++ ++ break; ++ case HID_REQ_SetProtocol: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) ++ { ++ Endpoint_ClearSETUP(); ++ Endpoint_ClearStatusStage(); ++ ++ /* Set or clear the flag depending on what the host indicates that the current Protocol should be */ ++ UsingReportProtocol = (USB_ControlRequest.wValue != 0); ++ } ++ ++ break; ++ case HID_REQ_SetIdle: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) ++ { ++ Endpoint_ClearSETUP(); ++ Endpoint_ClearStatusStage(); ++ ++ /* Get idle period in MSB, IdleCount must be multiplied by 4 to get number of milliseconds */ ++ IdleCount = ((USB_ControlRequest.wValue & 0xFF00) >> 6); ++ } ++ ++ break; ++ case HID_REQ_GetIdle: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) ++ { ++ Endpoint_ClearSETUP(); ++ ++ /* Write the current idle duration to the host, must be divided by 4 before sent to host */ ++ Endpoint_Write_8(IdleCount >> 2); ++ ++ Endpoint_ClearIN(); ++ Endpoint_ClearStatusStage(); ++ } ++ ++ break; ++ } ++} ++ ++/** Event handler for the USB device Start Of Frame event. */ ++void EVENT_USB_Device_StartOfFrame(void) ++{ ++ /* One millisecond has elapsed, decrement the idle time remaining counter if it has not already elapsed */ ++ if (IdleMSRemaining) ++ IdleMSRemaining--; ++} ++ ++/** Fills the given HID report data structure with the next HID report to send to the host. ++ * ++ * \param[out] ReportData Pointer to a HID report data structure to be filled ++ */ ++void CreateKeyboardReport(USB_KeyboardReport_Data_t* const ReportData) ++{ ++ uint8_t JoyStatus_LCL = Joystick_GetStatus(); ++ uint8_t ButtonStatus_LCL = Buttons_GetStatus(); ++ ++ uint8_t UsedKeyCodes = 0; ++ ++ /* Clear the report contents */ ++ memset(ReportData, 0, sizeof(USB_KeyboardReport_Data_t)); ++ ++ /* Make sent key uppercase by indicating that the left shift key is pressed */ ++ ReportData->Modifier = HID_KEYBOARD_MODIFIER_LEFTSHIFT; ++ ++ if (JoyStatus_LCL & JOY_UP) ++ ReportData->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_A; ++ else if (JoyStatus_LCL & JOY_DOWN) ++ ReportData->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_B; ++ ++ if (JoyStatus_LCL & JOY_LEFT) ++ ReportData->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_C; ++ else if (JoyStatus_LCL & JOY_RIGHT) ++ ReportData->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_D; ++ ++ if (JoyStatus_LCL & JOY_PRESS) ++ ReportData->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_E; ++ ++ if (ButtonStatus_LCL & BUTTONS_BUTTON1) ++ ReportData->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_F; ++} ++ ++/** Processes a received LED report, and updates the board LEDs states to match. ++ * ++ * \param[in] LEDReport LED status report from the host ++ */ ++void ProcessLEDReport(const uint8_t LEDReport) ++{ ++ uint8_t LEDMask = LEDS_LED2; ++ ++ if (LEDReport & HID_KEYBOARD_LED_NUMLOCK) ++ LEDMask |= LEDS_LED1; ++ ++ if (LEDReport & HID_KEYBOARD_LED_CAPSLOCK) ++ LEDMask |= LEDS_LED3; ++ ++ if (LEDReport & HID_KEYBOARD_LED_SCROLLLOCK) ++ LEDMask |= LEDS_LED4; ++ ++ /* Set the status LEDs to the current Keyboard LED status */ ++ LEDs_SetAllLEDs(LEDMask); ++} ++ ++/** Sends the next HID report to the host, via the keyboard data endpoint. */ ++void SendNextReport(void) ++{ ++ static USB_KeyboardReport_Data_t PrevKeyboardReportData; ++ USB_KeyboardReport_Data_t KeyboardReportData; ++ bool SendReport = false; ++ ++ /* Create the next keyboard report for transmission to the host */ ++ CreateKeyboardReport(&KeyboardReportData); ++ ++ /* Check if the idle period is set and has elapsed */ ++ if (IdleCount && (!(IdleMSRemaining))) ++ { ++ /* Reset the idle time remaining counter */ ++ IdleMSRemaining = IdleCount; ++ ++ /* Idle period is set and has elapsed, must send a report to the host */ ++ SendReport = true; ++ } ++ else ++ { ++ /* Check to see if the report data has changed - if so a report MUST be sent */ ++ SendReport = (memcmp(&PrevKeyboardReportData, &KeyboardReportData, sizeof(USB_KeyboardReport_Data_t)) != 0); ++ } ++ ++ /* Select the Keyboard Report Endpoint */ ++ Endpoint_SelectEndpoint(KEYBOARD_IN_EPADDR); ++ ++ /* Check if Keyboard Endpoint Ready for Read/Write and if we should send a new report */ ++ if (Endpoint_IsReadWriteAllowed() && SendReport) ++ { ++ /* Save the current report data for later comparison to check for changes */ ++ PrevKeyboardReportData = KeyboardReportData; ++ ++ /* Write Keyboard Report Data */ ++ Endpoint_Write_Stream_LE(&KeyboardReportData, sizeof(KeyboardReportData), NULL); ++ ++ /* Finalize the stream transfer to send the last packet */ ++ Endpoint_ClearIN(); ++ } ++} ++ ++/** Reads the next LED status report from the host from the LED data endpoint, if one has been sent. */ ++void ReceiveNextReport(void) ++{ ++ /* Select the Keyboard LED Report Endpoint */ ++ Endpoint_SelectEndpoint(KEYBOARD_OUT_EPADDR); ++ ++ /* Check if Keyboard LED Endpoint contains a packet */ ++ if (Endpoint_IsOUTReceived()) ++ { ++ /* Check to see if the packet contains data */ ++ if (Endpoint_IsReadWriteAllowed()) ++ { ++ /* Read in the LED report from the host */ ++ uint8_t LEDReport = Endpoint_Read_8(); ++ ++ /* Process the read LED report from the host */ ++ ProcessLEDReport(LEDReport); ++ } ++ ++ /* Handshake the OUT Endpoint - clear endpoint and ready for next report */ ++ Endpoint_ClearOUT(); ++ } ++} ++ ++/** Function to manage HID report generation and transmission to the host, when in report mode. */ ++void HID_Task(void) ++{ ++ /* Device must be connected and configured for the task to run */ ++ if (USB_DeviceState != DEVICE_STATE_Configured) ++ return; ++ ++ /* Send the next keypress report to the host */ ++ SendNextReport(); ++ ++ /* Process the LED report sent from the host */ ++ ReceiveNextReport(); ++} ++ diff --cc lib/lufa/Demos/Device/LowLevel/Keyboard/Keyboard.h index 000000000,000000000..5c6bad371 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/Keyboard/Keyboard.h @@@ -1,0 -1,0 +1,85 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ Copyright 2010 Denver Gingerich (denver [at] ossguy [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 Keyboard.c. ++ */ ++ ++#ifndef _KEYBOARD_H_ ++#define _KEYBOARD_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <stdbool.h> ++ #include <string.h> ++ ++ #include "Descriptors.h" ++ ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Drivers/Board/Joystick.h> ++ #include <LUFA/Drivers/Board/Buttons.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Platform/Platform.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 HID_Task(void); ++ ++ void EVENT_USB_Device_Connect(void); ++ void EVENT_USB_Device_Disconnect(void); ++ void EVENT_USB_Device_ConfigurationChanged(void); ++ void EVENT_USB_Device_ControlRequest(void); ++ void EVENT_USB_Device_StartOfFrame(void); ++ ++ void CreateKeyboardReport(USB_KeyboardReport_Data_t* const ReportData); ++ void ProcessLEDReport(const uint8_t LEDReport); ++ void SendNextReport(void); ++ void ReceiveNextReport(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/Keyboard/Keyboard.txt index 000000000,000000000..e945dccfe new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/Keyboard/Keyboard.txt @@@ -1,0 -1,0 +1,76 @@@ ++/** \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 Keyboard Device Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * \li Series 6 USB AVRs (AT90USBxxx6) ++ * \li Series 4 USB AVRs (ATMEGAxxU4) ++ * \li Series 2 USB AVRs (AT90USBxx2, ATMEGAxxU2) ++ * \li Series AU XMEGA AVRs (ATXMEGAxxxAxU) ++ * \li Series B XMEGA AVRs (ATXMEGAxxxBx) ++ * \li Series C XMEGA AVRs (ATXMEGAxxxCx) ++ * ++ * \section Sec_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>Human Interface Device (HID)</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>N/A</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF HID Specification \n ++ * USBIF HID Usage Tables</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Low Speed Mode \n ++ * Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Keyboard demonstration application. This gives a simple reference application ++ * for implementing a USB Keyboard using the basic USB HID drivers in all modern ++ * OSes (i.e. no special drivers required). It is boot protocol compatible, and thus ++ * works under compatible BIOS as if it was a native keyboard (e.g. PS/2). ++ * ++ * On start-up the system will automatically enumerate and function as a keyboard ++ * when the USB connection to a host is present. To use the keyboard example, ++ * manipulate the joystick to send the letters a, b, c, d and e. See the USB HID ++ * documentation for more information on sending keyboard event and key presses. Unlike ++ * other LUFA Keyboard demos, this example shows explicitly how to send multiple key presses ++ * inside the same report to the host. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Device/LowLevel/Keyboard/asf.xml index 000000000,000000000..4d386f46f new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/Keyboard/asf.xml @@@ -1,0 -1,0 +1,62 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Keyboard HID Device Demo (Low Level APIs)" id="lufa.demos.device.lowlevel.keyboard.example.avr8"> ++ <require idref="lufa.demos.device.lowlevel.keyboard"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <project caption="Keyboard HID Device Demo (Low Level APIs)" id="lufa.demos.device.lowlevel.keyboard.example.xmega"> ++ <require idref="lufa.demos.device.lowlevel.keyboard"/> ++ <require idref="lufa.boards.dummy.xmega"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atxmega128a1u"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="32000000UL"/> ++ <build type="define" name="F_USB" value="48000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.device.lowlevel.keyboard" caption="Keyboard HID Device Demo (Low Level APIs)"> ++ <info type="description" value="summary"> ++ Keyboard HID device demo, implementing a basic USB keyboard that can send key press information to the host. This demo uses the Low Level LUFA APIs to manually implement a USB Class for demonstration purposes without using the simpler in-built LUFA Class Driver APIs. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Low Level APIs"/> ++ <keyword value="USB Device"/> ++ <keyword value="HID Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="Keyboard.txt"/> ++ ++ <build type="c-source" value="Keyboard.c"/> ++ <build type="c-source" value="Descriptors.c"/> ++ <build type="header-file" value="Keyboard.h"/> ++ <build type="header-file" value="Descriptors.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ <require idref="lufa.drivers.board.joystick"/> ++ <require idref="lufa.drivers.board.buttons"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Device/LowLevel/Keyboard/doxyfile index 000000000,000000000..e39731937 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/Keyboard/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Keyboard 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Device/LowLevel/Keyboard/makefile index 000000000,000000000..dd53f3fa0 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/Keyboard/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = Keyboard ++SRC = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Device/LowLevel/KeyboardMouse/Config/LUFAConfig.h index 000000000,000000000..cc828a108 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/KeyboardMouse/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,126 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++ #define USB_DEVICE_ONLY ++// #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #elif (ARCH == ARCH_XMEGA) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_RC32MCLKSRC | USB_OPT_BUSEVENT_PRIHIGH) ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++ #define MAX_ENDPOINT_INDEX 3 ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Device/LowLevel/KeyboardMouse/Descriptors.c index 000000000,000000000..7efc6d2ee new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/KeyboardMouse/Descriptors.c @@@ -1,0 -1,0 +1,346 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ Copyright 2010 Denver Gingerich (denver [at] ossguy [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special ++ * computer-readable structures which the host requests upon device enumeration, to determine ++ * the device's capabilities and functions. ++ */ ++ ++#include "Descriptors.h" ++ ++/** HID class report descriptor. This is a special descriptor constructed with values from the ++ * USBIF HID class specification to describe the reports and capabilities of the HID device. This ++ * descriptor is parsed by the host and its contents used to determine what data (and in what encoding) ++ * the device will send, and what it may be sent back from the host. Refer to the HID specification for ++ * more details on HID report descriptors. ++ * ++ * This descriptor describes the mouse HID interface's report structure. ++ */ ++const USB_Descriptor_HIDReport_Datatype_t PROGMEM MouseReport[] = ++{ ++ HID_RI_USAGE_PAGE(8, 0x01), /* Generic Desktop */ ++ HID_RI_USAGE(8, 0x02), /* Mouse */ ++ HID_RI_COLLECTION(8, 0x01), /* Application */ ++ HID_RI_USAGE(8, 0x01), /* Pointer */ ++ HID_RI_COLLECTION(8, 0x00), /* Physical */ ++ HID_RI_USAGE_PAGE(8, 0x09), /* Button */ ++ HID_RI_USAGE_MINIMUM(8, 0x01), ++ HID_RI_USAGE_MAXIMUM(8, 0x03), ++ HID_RI_LOGICAL_MINIMUM(8, 0x00), ++ HID_RI_LOGICAL_MAXIMUM(8, 0x01), ++ HID_RI_REPORT_COUNT(8, 0x03), ++ HID_RI_REPORT_SIZE(8, 0x01), ++ HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), ++ HID_RI_REPORT_COUNT(8, 0x01), ++ HID_RI_REPORT_SIZE(8, 0x05), ++ HID_RI_INPUT(8, HID_IOF_CONSTANT), ++ HID_RI_USAGE_PAGE(8, 0x01), /* Generic Desktop */ ++ HID_RI_USAGE(8, 0x30), /* Usage X */ ++ HID_RI_USAGE(8, 0x31), /* Usage Y */ ++ HID_RI_LOGICAL_MINIMUM(8, -1), ++ HID_RI_LOGICAL_MAXIMUM(8, 1), ++ HID_RI_PHYSICAL_MINIMUM(8, -1), ++ HID_RI_PHYSICAL_MAXIMUM(8, 1), ++ HID_RI_REPORT_COUNT(8, 0x02), ++ HID_RI_REPORT_SIZE(8, 0x08), ++ HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE), ++ HID_RI_END_COLLECTION(0), ++ HID_RI_END_COLLECTION(0), ++}; ++ ++/** Same as the MouseReport structure, but defines the keyboard HID interface's report structure. */ ++const USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] = ++{ ++ HID_RI_USAGE_PAGE(8, 0x01), /* Generic Desktop */ ++ HID_RI_USAGE(8, 0x06), /* Keyboard */ ++ HID_RI_COLLECTION(8, 0x01), /* Application */ ++ HID_RI_USAGE_PAGE(8, 0x07), /* Key Codes */ ++ HID_RI_USAGE_MINIMUM(8, 0xE0), /* Keyboard Left Control */ ++ HID_RI_USAGE_MAXIMUM(8, 0xE7), /* Keyboard Right GUI */ ++ HID_RI_LOGICAL_MINIMUM(8, 0x00), ++ HID_RI_LOGICAL_MAXIMUM(8, 0x01), ++ HID_RI_REPORT_SIZE(8, 0x01), ++ HID_RI_REPORT_COUNT(8, 0x08), ++ HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), ++ HID_RI_REPORT_COUNT(8, 0x01), ++ HID_RI_REPORT_SIZE(8, 0x08), ++ HID_RI_INPUT(8, HID_IOF_CONSTANT), ++ HID_RI_USAGE_PAGE(8, 0x08), /* LEDs */ ++ HID_RI_USAGE_MINIMUM(8, 0x01), /* Num Lock */ ++ HID_RI_USAGE_MAXIMUM(8, 0x05), /* Kana */ ++ HID_RI_REPORT_COUNT(8, 0x05), ++ HID_RI_REPORT_SIZE(8, 0x01), ++ HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE), ++ HID_RI_REPORT_COUNT(8, 0x01), ++ HID_RI_REPORT_SIZE(8, 0x03), ++ HID_RI_OUTPUT(8, HID_IOF_CONSTANT), ++ HID_RI_LOGICAL_MINIMUM(8, 0x00), ++ HID_RI_LOGICAL_MAXIMUM(8, 0x65), ++ HID_RI_USAGE_PAGE(8, 0x07), /* Keyboard */ ++ HID_RI_USAGE_MINIMUM(8, 0x00), /* Reserved (no event indicated) */ ++ HID_RI_USAGE_MAXIMUM(8, 0x65), /* Keyboard Application */ ++ HID_RI_REPORT_COUNT(8, 0x06), ++ HID_RI_REPORT_SIZE(8, 0x08), ++ HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE), ++ HID_RI_END_COLLECTION(0), ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = ++{ ++ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, ++ ++ .USBSpecification = VERSION_BCD(1,1,0), ++ .Class = USB_CSCP_NoDeviceClass, ++ .SubClass = USB_CSCP_NoDeviceSubclass, ++ .Protocol = USB_CSCP_NoDeviceProtocol, ++ ++ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, ++ ++ .VendorID = 0x03EB, ++ .ProductID = 0x204D, ++ .ReleaseNumber = VERSION_BCD(0,0,1), ++ ++ .ManufacturerStrIndex = STRING_ID_Manufacturer, ++ .ProductStrIndex = STRING_ID_Product, ++ .SerialNumStrIndex = NO_DESCRIPTOR, ++ ++ .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. ++ */ ++const 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 = 2, ++ ++ .ConfigurationNumber = 1, ++ .ConfigurationStrIndex = NO_DESCRIPTOR, ++ ++ .ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED), ++ ++ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) ++ }, ++ ++ .HID1_KeyboardInterface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_Keyboard, ++ .AlternateSetting = 0x00, ++ ++ .TotalEndpoints = 2, ++ ++ .Class = HID_CSCP_HIDClass, ++ .SubClass = HID_CSCP_BootSubclass, ++ .Protocol = HID_CSCP_KeyboardBootProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .HID1_KeyboardHID = ++ { ++ .Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID}, ++ ++ .HIDSpec = VERSION_BCD(1,1,1), ++ .CountryCode = 0x00, ++ .TotalReportDescriptors = 1, ++ .HIDReportType = HID_DTYPE_Report, ++ .HIDReportLength = sizeof(KeyboardReport) ++ }, ++ ++ .HID1_ReportINEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = KEYBOARD_IN_EPADDR, ++ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = HID_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++ ++ .HID1_ReportOUTEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = KEYBOARD_OUT_EPADDR, ++ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = HID_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++ ++ .HID2_MouseInterface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_Mouse, ++ .AlternateSetting = 0x00, ++ ++ .TotalEndpoints = 1, ++ ++ .Class = HID_CSCP_HIDClass, ++ .SubClass = HID_CSCP_BootSubclass, ++ .Protocol = HID_CSCP_MouseBootProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .HID2_MouseHID = ++ { ++ .Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID}, ++ ++ .HIDSpec = VERSION_BCD(1,1,1), ++ .CountryCode = 0x00, ++ .TotalReportDescriptors = 1, ++ .HIDReportType = HID_DTYPE_Report, ++ .HIDReportLength = sizeof(MouseReport) ++ }, ++ ++ .HID2_ReportINEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = MOUSE_IN_EPADDR, ++ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = HID_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ } ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_String_t PROGMEM LanguageString = USB_STRING_DESCRIPTOR_ARRAY(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"LUFA Mouse and Keyboard 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 uint16_t wIndex, ++ const void** const DescriptorAddress) ++{ ++ const uint8_t DescriptorType = (wValue >> 8); ++ const uint8_t DescriptorNumber = (wValue & 0xFF); ++ ++ const void* Address = NULL; ++ uint16_t Size = NO_DESCRIPTOR; ++ ++ switch (DescriptorType) ++ { ++ case DTYPE_Device: ++ Address = &DeviceDescriptor; ++ Size = sizeof(USB_Descriptor_Device_t); ++ break; ++ case DTYPE_Configuration: ++ Address = &ConfigurationDescriptor; ++ Size = sizeof(USB_Descriptor_Configuration_t); ++ break; ++ case DTYPE_String: ++ switch (DescriptorNumber) ++ { ++ case STRING_ID_Language: ++ Address = &LanguageString; ++ Size = pgm_read_byte(&LanguageString.Header.Size); ++ break; ++ case STRING_ID_Manufacturer: ++ Address = &ManufacturerString; ++ Size = pgm_read_byte(&ManufacturerString.Header.Size); ++ break; ++ case STRING_ID_Product: ++ Address = &ProductString; ++ Size = pgm_read_byte(&ProductString.Header.Size); ++ break; ++ } ++ ++ break; ++ case HID_DTYPE_HID: ++ switch (wIndex) ++ { ++ case (INTERFACE_ID_Keyboard): ++ Address = &ConfigurationDescriptor.HID1_KeyboardHID; ++ Size = sizeof(USB_HID_Descriptor_HID_t); ++ break; ++ case (INTERFACE_ID_Mouse): ++ Address = &ConfigurationDescriptor.HID2_MouseHID; ++ Size = sizeof(USB_HID_Descriptor_HID_t); ++ break; ++ } ++ break; ++ case HID_DTYPE_Report: ++ switch (wIndex) ++ { ++ case INTERFACE_ID_Keyboard: ++ Address = &KeyboardReport; ++ Size = sizeof(KeyboardReport); ++ break; ++ case INTERFACE_ID_Mouse: ++ Address = &MouseReport; ++ Size = sizeof(MouseReport); ++ break; ++ } ++ ++ break; ++ } ++ ++ *DescriptorAddress = Address; ++ return Size; ++} ++ diff --cc lib/lufa/Demos/Device/LowLevel/KeyboardMouse/Descriptors.h index 000000000,000000000..f59ac97ec new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/KeyboardMouse/Descriptors.h @@@ -1,0 -1,0 +1,107 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ Copyright 2010 Denver Gingerich (denver [at] ossguy [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * Header file for Descriptors.c. ++ */ ++ ++#ifndef _DESCRIPTORS_H_ ++#define _DESCRIPTORS_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include <avr/pgmspace.h> ++ ++ /* 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; ++ ++ // Keyboard HID Interface ++ USB_Descriptor_Interface_t HID1_KeyboardInterface; ++ USB_HID_Descriptor_HID_t HID1_KeyboardHID; ++ USB_Descriptor_Endpoint_t HID1_ReportINEndpoint; ++ USB_Descriptor_Endpoint_t HID1_ReportOUTEndpoint; ++ ++ // Mouse HID Interface ++ USB_Descriptor_Interface_t HID2_MouseInterface; ++ USB_HID_Descriptor_HID_t HID2_MouseHID; ++ USB_Descriptor_Endpoint_t HID2_ReportINEndpoint; ++ } USB_Descriptor_Configuration_t; ++ ++ /** Enum for the device interface descriptor IDs within the device. Each interface descriptor ++ * should have a unique ID index associated with it, which can be used to refer to the ++ * interface from other descriptors. ++ */ ++ enum InterfaceDescriptors_t ++ { ++ INTERFACE_ID_Keyboard = 0, /**< Keyboard interface descriptor ID */ ++ INTERFACE_ID_Mouse = 1, /**< Mouse interface descriptor ID */ ++ }; ++ ++ /** Enum for the device string descriptor IDs within the device. Each string descriptor should ++ * have a unique ID index associated with it, which can be used to refer to the string from ++ * other descriptors. ++ */ ++ enum StringDescriptors_t ++ { ++ STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */ ++ STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */ ++ STRING_ID_Product = 2, /**< Product string ID */ ++ }; ++ ++ /* Macros: */ ++ /** Endpoint address of the Keyboard HID reporting IN endpoint. */ ++ #define KEYBOARD_IN_EPADDR (ENDPOINT_DIR_IN | 1) ++ ++ /** Endpoint address of the Keyboard HID reporting OUT endpoint. */ ++ #define KEYBOARD_OUT_EPADDR (ENDPOINT_DIR_OUT | 2) ++ ++ /** Endpoint address of the Mouse HID reporting IN endpoint. */ ++ #define MOUSE_IN_EPADDR (ENDPOINT_DIR_IN | 3) ++ ++ /** Size in bytes of each of the HID reporting IN and OUT endpoints. */ ++ #define HID_EPSIZE 8 ++ ++ /* Function Prototypes: */ ++ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ++ const uint16_t wIndex, ++ const void** const DescriptorAddress) ++ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.c index 000000000,000000000..0f2719ce7 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.c @@@ -1,0 -1,0 +1,321 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ Copyright 2010 Denver Gingerich (denver [at] ossguy [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 KeyboardMouse demo. This file contains the main tasks of the demo and ++ * is responsible for the initial application hardware configuration. ++ */ ++ ++#include "KeyboardMouse.h" ++ ++/** Global structure to hold the current keyboard interface HID report, for transmission to the host */ ++static USB_KeyboardReport_Data_t KeyboardReportData; ++ ++/** Global structure to hold the current mouse interface HID report, for transmission to the host */ ++static USB_MouseReport_Data_t MouseReportData; ++ ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ Keyboard_HID_Task(); ++ Mouse_HID_Task(); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#elif (ARCH == ARCH_XMEGA) ++ /* Start the PLL to multiply the 2MHz RC oscillator to 32MHz and switch the CPU core to run from it */ ++ XMEGACLK_StartPLL(CLOCK_SRC_INT_RC2MHZ, 2000000, F_CPU); ++ XMEGACLK_SetCPUClockSource(CLOCK_SRC_PLL); ++ ++ /* Start the 32MHz internal RC oscillator and start the DFLL to increase it to 48MHz using the USB SOF as a reference */ ++ XMEGACLK_StartInternalOscillator(CLOCK_SRC_INT_RC32MHZ); ++ XMEGACLK_StartDFLL(CLOCK_SRC_INT_RC32MHZ, DFLL_REF_INT_USBSOF, F_USB); ++ ++ PMIC.CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm; ++#endif ++ ++ /* Hardware Initialization */ ++ Joystick_Init(); ++ LEDs_Init(); ++ USB_Init(); ++} ++ ++/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and ++ * starts the library USB task to begin the enumeration and USB management process. ++ */ ++void EVENT_USB_Device_Connect(void) ++{ ++ /* Indicate USB enumerating */ ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via ++ * the status LEDs and stops the USB management task. ++ */ ++void EVENT_USB_Device_Disconnect(void) ++{ ++ /* Indicate USB not ready */ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_ConfigurationChanged event. This is fired when the host sets the current configuration ++ * of the USB device after enumeration, and configures the keyboard and mouse device endpoints. ++ */ ++void EVENT_USB_Device_ConfigurationChanged(void) ++{ ++ bool ConfigSuccess = true; ++ ++ /* Setup Keyboard HID Report Endpoints */ ++ ConfigSuccess &= Endpoint_ConfigureEndpoint(KEYBOARD_IN_EPADDR, EP_TYPE_INTERRUPT, HID_EPSIZE, 1); ++ ConfigSuccess &= Endpoint_ConfigureEndpoint(KEYBOARD_OUT_EPADDR, EP_TYPE_INTERRUPT, HID_EPSIZE, 1); ++ ++ /* Setup Mouse HID Report Endpoint */ ++ ConfigSuccess &= Endpoint_ConfigureEndpoint(MOUSE_IN_EPADDR, EP_TYPE_INTERRUPT, HID_EPSIZE, 1); ++ ++ /* Indicate endpoint configuration success or failure */ ++ LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); ++} ++ ++/** Event handler for the USB_ControlRequest event. This is used to catch and process control requests sent to ++ * the device from the USB host before passing along unhandled control requests to the library for processing ++ * internally. ++ */ ++void EVENT_USB_Device_ControlRequest(void) ++{ ++ uint8_t* ReportData; ++ uint8_t ReportSize; ++ ++ /* Handle HID Class specific requests */ ++ switch (USB_ControlRequest.bRequest) ++ { ++ case HID_REQ_GetReport: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) ++ { ++ Endpoint_ClearSETUP(); ++ ++ /* Determine if it is the mouse or the keyboard data that is being requested */ ++ if (!(USB_ControlRequest.wIndex)) ++ { ++ ReportData = (uint8_t*)&KeyboardReportData; ++ ReportSize = sizeof(KeyboardReportData); ++ } ++ else ++ { ++ ReportData = (uint8_t*)&MouseReportData; ++ ReportSize = sizeof(MouseReportData); ++ } ++ ++ /* Write the report data to the control endpoint */ ++ Endpoint_Write_Control_Stream_LE(ReportData, ReportSize); ++ Endpoint_ClearOUT(); ++ ++ /* Clear the report data afterwards */ ++ memset(ReportData, 0, ReportSize); ++ } ++ ++ break; ++ case HID_REQ_SetReport: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) ++ { ++ Endpoint_ClearSETUP(); ++ ++ /* Wait until the LED report has been sent by the host */ ++ while (!(Endpoint_IsOUTReceived())) ++ { ++ if (USB_DeviceState == DEVICE_STATE_Unattached) ++ return; ++ } ++ ++ /* Read in the LED report from the host */ ++ uint8_t LEDStatus = Endpoint_Read_8(); ++ ++ Endpoint_ClearOUT(); ++ Endpoint_ClearStatusStage(); ++ ++ /* Process the incoming LED report */ ++ Keyboard_ProcessLEDReport(LEDStatus); ++ } ++ ++ break; ++ } ++} ++ ++/** Processes a given Keyboard LED report from the host, and sets the board LEDs to match. Since the Keyboard ++ * LED report can be sent through either the control endpoint (via a HID SetReport request) or the HID OUT ++ * endpoint, the processing code is placed here to avoid duplicating it and potentially having different ++ * behavior depending on the method used to sent it. ++ */ ++void Keyboard_ProcessLEDReport(const uint8_t LEDStatus) ++{ ++ uint8_t LEDMask = LEDS_LED2; ++ ++ if (LEDStatus & HID_KEYBOARD_LED_NUMLOCK) ++ LEDMask |= LEDS_LED1; ++ ++ if (LEDStatus & HID_KEYBOARD_LED_CAPSLOCK) ++ LEDMask |= LEDS_LED3; ++ ++ if (LEDStatus & HID_KEYBOARD_LED_SCROLLLOCK) ++ LEDMask |= LEDS_LED4; ++ ++ /* Set the status LEDs to the current Keyboard LED status */ ++ LEDs_SetAllLEDs(LEDMask); ++} ++ ++/** Keyboard task. This generates the next keyboard HID report for the host, and transmits it via the ++ * keyboard IN endpoint when the host is ready for more data. Additionally, it processes host LED status ++ * reports sent to the device via the keyboard OUT reporting endpoint. ++ */ ++void Keyboard_HID_Task(void) ++{ ++ uint8_t JoyStatus_LCL = Joystick_GetStatus(); ++ ++ /* Device must be connected and configured for the task to run */ ++ if (USB_DeviceState != DEVICE_STATE_Configured) ++ return; ++ ++ /* Check if board button is not pressed, if so mouse mode enabled */ ++ if (!(Buttons_GetStatus() & BUTTONS_BUTTON1)) ++ { ++ /* Make sent key uppercase by indicating that the left shift key is pressed */ ++ KeyboardReportData.Modifier = HID_KEYBOARD_MODIFIER_LEFTSHIFT; ++ ++ if (JoyStatus_LCL & JOY_UP) ++ KeyboardReportData.KeyCode[0] = HID_KEYBOARD_SC_A; ++ else if (JoyStatus_LCL & JOY_DOWN) ++ KeyboardReportData.KeyCode[0] = HID_KEYBOARD_SC_B; ++ ++ if (JoyStatus_LCL & JOY_LEFT) ++ KeyboardReportData.KeyCode[0] = HID_KEYBOARD_SC_C; ++ else if (JoyStatus_LCL & JOY_RIGHT) ++ KeyboardReportData.KeyCode[0] = HID_KEYBOARD_SC_D; ++ ++ if (JoyStatus_LCL & JOY_PRESS) ++ KeyboardReportData.KeyCode[0] = HID_KEYBOARD_SC_E; ++ } ++ ++ /* Select the Keyboard Report Endpoint */ ++ Endpoint_SelectEndpoint(KEYBOARD_IN_EPADDR); ++ ++ /* Check if Keyboard Endpoint Ready for Read/Write */ ++ if (Endpoint_IsReadWriteAllowed()) ++ { ++ /* Write Keyboard Report Data */ ++ Endpoint_Write_Stream_LE(&KeyboardReportData, sizeof(KeyboardReportData), NULL); ++ ++ /* Finalize the stream transfer to send the last packet */ ++ Endpoint_ClearIN(); ++ ++ /* Clear the report data afterwards */ ++ memset(&KeyboardReportData, 0, sizeof(KeyboardReportData)); ++ } ++ ++ /* Select the Keyboard LED Report Endpoint */ ++ Endpoint_SelectEndpoint(KEYBOARD_OUT_EPADDR); ++ ++ /* Check if Keyboard LED Endpoint Ready for Read/Write */ ++ if (Endpoint_IsReadWriteAllowed()) ++ { ++ /* Read in and process the LED report from the host */ ++ Keyboard_ProcessLEDReport(Endpoint_Read_8()); ++ ++ /* Handshake the OUT Endpoint - clear endpoint and ready for next report */ ++ Endpoint_ClearOUT(); ++ } ++} ++ ++/** Mouse task. This generates the next mouse HID report for the host, and transmits it via the ++ * mouse IN endpoint when the host is ready for more data. ++ */ ++void Mouse_HID_Task(void) ++{ ++ uint8_t JoyStatus_LCL = Joystick_GetStatus(); ++ ++ /* Device must be connected and configured for the task to run */ ++ if (USB_DeviceState != DEVICE_STATE_Configured) ++ return; ++ ++ /* Check if board button is pressed, if so mouse mode enabled */ ++ if (Buttons_GetStatus() & BUTTONS_BUTTON1) ++ { ++ if (JoyStatus_LCL & JOY_UP) ++ MouseReportData.Y = 1; ++ else if (JoyStatus_LCL & JOY_DOWN) ++ MouseReportData.Y = -1; ++ ++ if (JoyStatus_LCL & JOY_RIGHT) ++ MouseReportData.X = 1; ++ else if (JoyStatus_LCL & JOY_LEFT) ++ MouseReportData.X = -1; ++ ++ if (JoyStatus_LCL & JOY_PRESS) ++ MouseReportData.Button |= (1 << 0); ++ } ++ ++ /* Select the Mouse Report Endpoint */ ++ Endpoint_SelectEndpoint(MOUSE_IN_EPADDR); ++ ++ /* Check if Mouse Endpoint Ready for Read/Write */ ++ if (Endpoint_IsReadWriteAllowed()) ++ { ++ /* Write Mouse Report Data */ ++ Endpoint_Write_Stream_LE(&MouseReportData, sizeof(MouseReportData), NULL); ++ ++ /* Finalize the stream transfer to send the last packet */ ++ Endpoint_ClearIN(); ++ ++ /* Clear the report data afterwards */ ++ memset(&MouseReportData, 0, sizeof(MouseReportData)); ++ } ++} ++ diff --cc lib/lufa/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.h index 000000000,000000000..4bcb33c06 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.h @@@ -1,0 -1,0 +1,77 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ Copyright 2010 Denver Gingerich (denver [at] ossguy [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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. ++*/ ++ ++#ifndef _KEYBOARD_MOUSE_H_ ++#define _KEYBOARD_MOUSE_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <stdbool.h> ++ #include <string.h> ++ ++ #include "Descriptors.h" ++ ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Drivers/Board/Joystick.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/Board/Buttons.h> ++ #include <LUFA/Platform/Platform.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 Keyboard_ProcessLEDReport(const uint8_t LEDStatus); ++ void Keyboard_HID_Task(void); ++ void Mouse_HID_Task(void); ++ ++ void EVENT_USB_Device_Connect(void); ++ void EVENT_USB_Device_Disconnect(void); ++ void EVENT_USB_Device_ConfigurationChanged(void); ++ void EVENT_USB_Device_ControlRequest(void); ++ void EVENT_USB_Device_StartOfFrame(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.txt index 000000000,000000000..262a84f0e new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.txt @@@ -1,0 -1,0 +1,81 @@@ ++/** \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 Dual HID Keyboard and Mouse Device Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * \li Series 6 USB AVRs (AT90USBxxx6) ++ * \li Series 4 USB AVRs (ATMEGAxxU4) ++ * \li Series 2 USB AVRs (AT90USBxx2, ATMEGAxxU2) ++ * \li Series AU XMEGA AVRs (ATXMEGAxxxAxU) ++ * \li Series B XMEGA AVRs (ATXMEGAxxxBx) ++ * \li Series C XMEGA AVRs (ATXMEGAxxxCx) ++ * ++ * \section Sec_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>Human Interface Device (HID)</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>N/A</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF HID Specification \n ++ * USBIF HID Usage Tables</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Low Speed Mode \n ++ * Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Keyboard/Mouse demonstration application. This gives a simple reference ++ * application for implementing a composite device containing both USB Keyboard ++ * and USB Mouse functionality using the basic USB HID drivers in all modern OSes ++ * (i.e. no special drivers required). This example uses two separate HID ++ * interfaces for each function. It is boot protocol compatible, and thus works under ++ * compatible BIOS as if it was a native keyboard and mouse (e.g. PS/2). ++ * ++ * On start-up the system will automatically enumerate and function ++ * as a keyboard when the USB connection to a host is present and the HWB is not ++ * pressed. When enabled, manipulate the joystick to send the letters ++ * a, b, c, d and e. See the USB HID documentation for more information ++ * on sending keyboard event and key presses. ++ * ++ * When the HWB is pressed, the mouse mode is enabled. When enabled, move the ++ * joystick to move the pointer, and push the joystick inwards to simulate a ++ * left-button click. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Device/LowLevel/KeyboardMouse/asf.xml index 000000000,000000000..d44bb8043 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/KeyboardMouse/asf.xml @@@ -1,0 -1,0 +1,62 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Keyboard and Mouse HID Device Demo (Low Level APIs)" id="lufa.demos.device.lowlevel.keyboard_mouse.example.avr8"> ++ <require idref="lufa.demos.device.lowlevel.keyboard_mouse"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <project caption="Keyboard and Mouse HID Device Demo (Low Level APIs)" id="lufa.demos.device.lowlevel.keyboard_mouse.example.xmega"> ++ <require idref="lufa.demos.device.lowlevel.keyboard_mouse"/> ++ <require idref="lufa.boards.dummy.xmega"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atxmega128a1u"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="32000000UL"/> ++ <build type="define" name="F_USB" value="48000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.device.lowlevel.keyboard_mouse" caption="Keyboard and Mouse HID Device Demo (Low Level APIs)"> ++ <info type="description" value="summary"> ++ Keyboard and Mouse HID device demo, implementing a basic USB keyboard and mouse using a pair of HID interfaces. This demo uses the Low Level LUFA APIs to manually implement a USB Class for demonstration purposes without using the simpler in-built LUFA Class Driver APIs. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Low Level APIs"/> ++ <keyword value="USB Device"/> ++ <keyword value="HID Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="KeyboardMouse.txt"/> ++ ++ <build type="c-source" value="KeyboardMouse.c"/> ++ <build type="c-source" value="Descriptors.c"/> ++ <build type="header-file" value="KeyboardMouse.h"/> ++ <build type="header-file" value="Descriptors.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ <require idref="lufa.drivers.board.joystick"/> ++ <require idref="lufa.drivers.board.buttons"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Device/LowLevel/KeyboardMouse/doxyfile index 000000000,000000000..6648a78d1 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/KeyboardMouse/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Combined Keyboard/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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Device/LowLevel/KeyboardMouse/makefile index 000000000,000000000..cff064f9a new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/KeyboardMouse/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = KeyboardMouse ++SRC = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Device/LowLevel/MIDI/Config/LUFAConfig.h index 000000000,000000000..00eefc7bf new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/MIDI/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,126 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++ #define USB_DEVICE_ONLY ++// #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #elif (ARCH == ARCH_XMEGA) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_RC32MCLKSRC | USB_OPT_BUSEVENT_PRIHIGH) ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++ #define MAX_ENDPOINT_INDEX 2 ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Device/LowLevel/MIDI/Descriptors.c index 000000000,000000000..b4bcea1ee new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/MIDI/Descriptors.c @@@ -1,0 -1,0 +1,314 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special ++ * computer-readable structures which the host requests upon device enumeration, to determine ++ * the device's capabilities and functions. ++ */ ++ ++#include "Descriptors.h" ++ ++/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall ++ * device characteristics, including the supported USB version, control endpoint size and the ++ * number of device configurations. The descriptor is read out by the USB host when the enumeration ++ * process begins. ++ */ ++const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = ++{ ++ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, ++ ++ .USBSpecification = VERSION_BCD(1,1,0), ++ .Class = USB_CSCP_NoDeviceClass, ++ .SubClass = USB_CSCP_NoDeviceSubclass, ++ .Protocol = USB_CSCP_NoDeviceProtocol, ++ ++ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, ++ ++ .VendorID = 0x03EB, ++ .ProductID = 0x2048, ++ .ReleaseNumber = VERSION_BCD(0,0,1), ++ ++ .ManufacturerStrIndex = STRING_ID_Manufacturer, ++ .ProductStrIndex = STRING_ID_Product, ++ .SerialNumStrIndex = NO_DESCRIPTOR, ++ ++ .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. ++ */ ++const 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 = 2, ++ ++ .ConfigurationNumber = 1, ++ .ConfigurationStrIndex = NO_DESCRIPTOR, ++ ++ .ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED), ++ ++ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) ++ }, ++ ++ .Audio_ControlInterface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_AudioControl, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 0, ++ ++ .Class = AUDIO_CSCP_AudioClass, ++ .SubClass = AUDIO_CSCP_ControlSubclass, ++ .Protocol = AUDIO_CSCP_ControlProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .Audio_ControlInterface_SPC = ++ { ++ .Header = {.Size = sizeof(USB_Audio_Descriptor_Interface_AC_t), .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_Header, ++ ++ .ACSpecification = VERSION_BCD(1,0,0), ++ .TotalLength = sizeof(USB_Audio_Descriptor_Interface_AC_t), ++ ++ .InCollection = 1, ++ .InterfaceNumber = INTERFACE_ID_AudioStream, ++ }, ++ ++ .Audio_StreamInterface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_AudioStream, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 2, ++ ++ .Class = AUDIO_CSCP_AudioClass, ++ .SubClass = AUDIO_CSCP_MIDIStreamingSubclass, ++ .Protocol = AUDIO_CSCP_StreamingProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .Audio_StreamInterface_SPC = ++ { ++ .Header = {.Size = sizeof(USB_MIDI_Descriptor_AudioInterface_AS_t), .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_General, ++ ++ .AudioSpecification = VERSION_BCD(1,0,0), ++ ++ .TotalLength = (sizeof(USB_Descriptor_Configuration_t) - ++ offsetof(USB_Descriptor_Configuration_t, Audio_StreamInterface_SPC)) ++ }, ++ ++ .MIDI_In_Jack_Emb = ++ { ++ .Header = {.Size = sizeof(USB_MIDI_Descriptor_InputJack_t), .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_InputTerminal, ++ ++ .JackType = MIDI_JACKTYPE_Embedded, ++ .JackID = 0x01, ++ ++ .JackStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .MIDI_In_Jack_Ext = ++ { ++ .Header = {.Size = sizeof(USB_MIDI_Descriptor_InputJack_t), .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_InputTerminal, ++ ++ .JackType = MIDI_JACKTYPE_External, ++ .JackID = 0x02, ++ ++ .JackStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .MIDI_Out_Jack_Emb = ++ { ++ .Header = {.Size = sizeof(USB_MIDI_Descriptor_OutputJack_t), .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_OutputTerminal, ++ ++ .JackType = MIDI_JACKTYPE_Embedded, ++ .JackID = 0x03, ++ ++ .NumberOfPins = 1, ++ .SourceJackID = {0x02}, ++ .SourcePinID = {0x01}, ++ ++ .JackStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .MIDI_Out_Jack_Ext = ++ { ++ .Header = {.Size = sizeof(USB_MIDI_Descriptor_OutputJack_t), .Type = DTYPE_CSInterface}, ++ .Subtype = AUDIO_DSUBTYPE_CSInterface_OutputTerminal, ++ ++ .JackType = MIDI_JACKTYPE_External, ++ .JackID = 0x04, ++ ++ .NumberOfPins = 1, ++ .SourceJackID = {0x01}, ++ .SourcePinID = {0x01}, ++ ++ .JackStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .MIDI_In_Jack_Endpoint = ++ { ++ .Endpoint = ++ { ++ .Header = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Std_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = MIDI_STREAM_OUT_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = MIDI_STREAM_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++ ++ .Refresh = 0, ++ .SyncEndpointNumber = 0 ++ }, ++ ++ .MIDI_In_Jack_Endpoint_SPC = ++ { ++ .Header = {.Size = sizeof(USB_MIDI_Descriptor_Jack_Endpoint_t), .Type = DTYPE_CSEndpoint}, ++ .Subtype = AUDIO_DSUBTYPE_CSEndpoint_General, ++ ++ .TotalEmbeddedJacks = 0x01, ++ .AssociatedJackID = {0x01} ++ }, ++ ++ .MIDI_Out_Jack_Endpoint = ++ { ++ .Endpoint = ++ { ++ .Header = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Std_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = MIDI_STREAM_IN_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = MIDI_STREAM_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++ ++ .Refresh = 0, ++ .SyncEndpointNumber = 0 ++ }, ++ ++ .MIDI_Out_Jack_Endpoint_SPC = ++ { ++ .Header = {.Size = sizeof(USB_MIDI_Descriptor_Jack_Endpoint_t), .Type = DTYPE_CSEndpoint}, ++ .Subtype = AUDIO_DSUBTYPE_CSEndpoint_General, ++ ++ .TotalEmbeddedJacks = 0x01, ++ .AssociatedJackID = {0x03} ++ } ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_String_t PROGMEM LanguageString = USB_STRING_DESCRIPTOR_ARRAY(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"LUFA MIDI 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 uint16_t wIndex, ++ const void** const DescriptorAddress) ++{ ++ const uint8_t DescriptorType = (wValue >> 8); ++ const uint8_t DescriptorNumber = (wValue & 0xFF); ++ ++ const void* Address = NULL; ++ uint16_t Size = NO_DESCRIPTOR; ++ ++ switch (DescriptorType) ++ { ++ case DTYPE_Device: ++ Address = &DeviceDescriptor; ++ Size = sizeof(USB_Descriptor_Device_t); ++ break; ++ case DTYPE_Configuration: ++ Address = &ConfigurationDescriptor; ++ Size = sizeof(USB_Descriptor_Configuration_t); ++ break; ++ case DTYPE_String: ++ switch (DescriptorNumber) ++ { ++ case STRING_ID_Language: ++ Address = &LanguageString; ++ Size = pgm_read_byte(&LanguageString.Header.Size); ++ break; ++ case STRING_ID_Manufacturer: ++ Address = &ManufacturerString; ++ Size = pgm_read_byte(&ManufacturerString.Header.Size); ++ break; ++ case STRING_ID_Product: ++ Address = &ProductString; ++ Size = pgm_read_byte(&ProductString.Header.Size); ++ break; ++ } ++ ++ break; ++ } ++ ++ *DescriptorAddress = Address; ++ return Size; ++} ++ diff --cc lib/lufa/Demos/Device/LowLevel/MIDI/Descriptors.h index 000000000,000000000..a477d9dc8 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/MIDI/Descriptors.h @@@ -1,0 -1,0 +1,108 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * Header file for Descriptors.c. ++ */ ++ ++#ifndef _DESCRIPTORS_H_ ++#define _DESCRIPTORS_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include <avr/pgmspace.h> ++ ++ /* Macros: */ ++ /** Endpoint address of the MIDI streaming data IN endpoint, for device-to-host data transfers. */ ++ #define MIDI_STREAM_IN_EPADDR (ENDPOINT_DIR_IN | 1) ++ ++ /** Endpoint address of the MIDI streaming data OUT endpoint, for host-to-device data transfers. */ ++ #define MIDI_STREAM_OUT_EPADDR (ENDPOINT_DIR_OUT | 2) ++ ++ /** Endpoint size in bytes of the Audio isochronous streaming data IN and OUT endpoints. */ ++ #define MIDI_STREAM_EPSIZE 64 ++ ++ /* 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; ++ ++ // MIDI Audio Control Interface ++ USB_Descriptor_Interface_t Audio_ControlInterface; ++ USB_Audio_Descriptor_Interface_AC_t Audio_ControlInterface_SPC; ++ ++ // MIDI Audio Streaming Interface ++ USB_Descriptor_Interface_t Audio_StreamInterface; ++ USB_MIDI_Descriptor_AudioInterface_AS_t Audio_StreamInterface_SPC; ++ USB_MIDI_Descriptor_InputJack_t MIDI_In_Jack_Emb; ++ USB_MIDI_Descriptor_InputJack_t MIDI_In_Jack_Ext; ++ USB_MIDI_Descriptor_OutputJack_t MIDI_Out_Jack_Emb; ++ USB_MIDI_Descriptor_OutputJack_t MIDI_Out_Jack_Ext; ++ USB_Audio_Descriptor_StreamEndpoint_Std_t MIDI_In_Jack_Endpoint; ++ USB_MIDI_Descriptor_Jack_Endpoint_t MIDI_In_Jack_Endpoint_SPC; ++ USB_Audio_Descriptor_StreamEndpoint_Std_t MIDI_Out_Jack_Endpoint; ++ USB_MIDI_Descriptor_Jack_Endpoint_t MIDI_Out_Jack_Endpoint_SPC; ++ } USB_Descriptor_Configuration_t; ++ ++ /** Enum for the device interface descriptor IDs within the device. Each interface descriptor ++ * should have a unique ID index associated with it, which can be used to refer to the ++ * interface from other descriptors. ++ */ ++ enum InterfaceDescriptors_t ++ { ++ INTERFACE_ID_AudioControl = 0, /**< Audio control interface descriptor ID */ ++ INTERFACE_ID_AudioStream = 1, /**< Audio stream interface descriptor ID */ ++ }; ++ ++ /** Enum for the device string descriptor IDs within the device. Each string descriptor should ++ * have a unique ID index associated with it, which can be used to refer to the string from ++ * other descriptors. ++ */ ++ enum StringDescriptors_t ++ { ++ STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */ ++ STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */ ++ STRING_ID_Product = 2, /**< Product string ID */ ++ }; ++ ++ /* Function Prototypes: */ ++ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ++ const uint16_t wIndex, ++ const void** const DescriptorAddress) ++ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/MIDI/MIDI.c index 000000000,000000000..0fdb04597 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/MIDI/MIDI.c @@@ -1,0 -1,0 +1,224 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 MIDI input demo. This file contains the main tasks of the demo and ++ * is responsible for the initial application hardware configuration. ++ */ ++ ++#include "MIDI.h" ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ MIDI_Task(); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#elif (ARCH == ARCH_XMEGA) ++ /* Start the PLL to multiply the 2MHz RC oscillator to 32MHz and switch the CPU core to run from it */ ++ XMEGACLK_StartPLL(CLOCK_SRC_INT_RC2MHZ, 2000000, F_CPU); ++ XMEGACLK_SetCPUClockSource(CLOCK_SRC_PLL); ++ ++ /* Start the 32MHz internal RC oscillator and start the DFLL to increase it to 48MHz using the USB SOF as a reference */ ++ XMEGACLK_StartInternalOscillator(CLOCK_SRC_INT_RC32MHZ); ++ XMEGACLK_StartDFLL(CLOCK_SRC_INT_RC32MHZ, DFLL_REF_INT_USBSOF, F_USB); ++ ++ PMIC.CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm; ++#endif ++ ++ /* Hardware Initialization */ ++ Joystick_Init(); ++ LEDs_Init(); ++ Buttons_Init(); ++ USB_Init(); ++} ++ ++/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs. */ ++void EVENT_USB_Device_Connect(void) ++{ ++ /* Indicate USB enumerating */ ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via ++ * the status LEDs, disables the sample update and PWM output timers and stops the USB and MIDI management tasks. ++ */ ++void EVENT_USB_Device_Disconnect(void) ++{ ++ /* Indicate USB not ready */ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration ++ * of the USB device after enumeration - the device endpoints are configured and the MIDI management task started. ++ */ ++void EVENT_USB_Device_ConfigurationChanged(void) ++{ ++ bool ConfigSuccess = true; ++ ++ /* Setup MIDI Data Endpoints */ ++ ConfigSuccess &= Endpoint_ConfigureEndpoint(MIDI_STREAM_IN_EPADDR, EP_TYPE_BULK, MIDI_STREAM_EPSIZE, 1); ++ ConfigSuccess &= Endpoint_ConfigureEndpoint(MIDI_STREAM_OUT_EPADDR, EP_TYPE_BULK, MIDI_STREAM_EPSIZE, 1); ++ ++ /* Indicate endpoint configuration success or failure */ ++ LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); ++} ++ ++/** Task to handle the generation of MIDI note change events in response to presses of the board joystick, and send them ++ * to the host. ++ */ ++void MIDI_Task(void) ++{ ++ static uint8_t PrevJoystickStatus; ++ ++ /* Device must be connected and configured for the task to run */ ++ if (USB_DeviceState != DEVICE_STATE_Configured) ++ return; ++ ++ Endpoint_SelectEndpoint(MIDI_STREAM_IN_EPADDR); ++ ++ if (Endpoint_IsINReady()) ++ { ++ uint8_t MIDICommand = 0; ++ uint8_t MIDIPitch; ++ ++ uint8_t JoystickStatus = Joystick_GetStatus(); ++ uint8_t JoystickChanges = (JoystickStatus ^ PrevJoystickStatus); ++ ++ /* Get board button status - if pressed use channel 10 (percussion), otherwise use channel 1 */ ++ uint8_t Channel = ((Buttons_GetStatus() & BUTTONS_BUTTON1) ? MIDI_CHANNEL(10) : MIDI_CHANNEL(1)); ++ ++ if (JoystickChanges & JOY_LEFT) ++ { ++ MIDICommand = ((JoystickStatus & JOY_LEFT)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF); ++ MIDIPitch = 0x3C; ++ } ++ ++ if (JoystickChanges & JOY_UP) ++ { ++ MIDICommand = ((JoystickStatus & JOY_UP)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF); ++ MIDIPitch = 0x3D; ++ } ++ ++ if (JoystickChanges & JOY_RIGHT) ++ { ++ MIDICommand = ((JoystickStatus & JOY_RIGHT)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF); ++ MIDIPitch = 0x3E; ++ } ++ ++ if (JoystickChanges & JOY_DOWN) ++ { ++ MIDICommand = ((JoystickStatus & JOY_DOWN)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF); ++ MIDIPitch = 0x3F; ++ } ++ ++ if (JoystickChanges & JOY_PRESS) ++ { ++ MIDICommand = ((JoystickStatus & JOY_PRESS)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF); ++ MIDIPitch = 0x3B; ++ } ++ ++ /* Check if a MIDI command is to be sent */ ++ if (MIDICommand) ++ { ++ MIDI_EventPacket_t MIDIEvent = (MIDI_EventPacket_t) ++ { ++ .Event = MIDI_EVENT(0, MIDICommand), ++ ++ .Data1 = MIDICommand | Channel, ++ .Data2 = MIDIPitch, ++ .Data3 = MIDI_STANDARD_VELOCITY, ++ }; ++ ++ /* Write the MIDI event packet to the endpoint */ ++ Endpoint_Write_Stream_LE(&MIDIEvent, sizeof(MIDIEvent), NULL); ++ ++ /* Send the data in the endpoint to the host */ ++ Endpoint_ClearIN(); ++ } ++ ++ /* Save previous joystick value for next joystick change detection */ ++ PrevJoystickStatus = JoystickStatus; ++ } ++ ++ /* Select the MIDI OUT stream */ ++ Endpoint_SelectEndpoint(MIDI_STREAM_OUT_EPADDR); ++ ++ /* Check if a MIDI command has been received */ ++ if (Endpoint_IsOUTReceived()) ++ { ++ MIDI_EventPacket_t MIDIEvent; ++ ++ /* Read the MIDI event packet from the endpoint */ ++ Endpoint_Read_Stream_LE(&MIDIEvent, sizeof(MIDIEvent), NULL); ++ ++ /* Check to see if the sent command is a note on message with a non-zero velocity */ ++ if ((MIDIEvent.Event == MIDI_EVENT(0, MIDI_COMMAND_NOTE_ON)) && (MIDIEvent.Data3 > 0)) ++ { ++ /* Change LEDs depending on the pitch of the sent note */ ++ LEDs_SetAllLEDs(MIDIEvent.Data2 > 64 ? LEDS_LED1 : LEDS_LED2); ++ } ++ else ++ { ++ /* Turn off all LEDs in response to non Note On messages */ ++ LEDs_SetAllLEDs(LEDS_NO_LEDS); ++ } ++ ++ /* If the endpoint is now empty, clear the bank */ ++ if (!(Endpoint_BytesInEndpoint())) ++ { ++ /* Clear the endpoint ready for new packet */ ++ Endpoint_ClearOUT(); ++ } ++ } ++} ++ diff --cc lib/lufa/Demos/Device/LowLevel/MIDI/MIDI.h index 000000000,000000000..55ba499b5 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/MIDI/MIDI.h @@@ -1,0 -1,0 +1,76 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 AudioOutput.c. ++ */ ++ ++#ifndef _AUDIO_OUTPUT_H_ ++#define _AUDIO_OUTPUT_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <stdbool.h> ++ ++ #include "Descriptors.h" ++ ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Drivers/Board/Joystick.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/Board/Buttons.h> ++ #include <LUFA/Platform/Platform.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 MIDI_Task(void); ++ ++ void EVENT_USB_Device_Connect(void); ++ void EVENT_USB_Device_Disconnect(void); ++ void EVENT_USB_Device_ConfigurationChanged(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/MIDI/MIDI.txt index 000000000,000000000..97a92a190 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/MIDI/MIDI.txt @@@ -1,0 -1,0 +1,78 @@@ ++/** \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 MIDI Input Device Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * \li Series 6 USB AVRs (AT90USBxxx6) ++ * \li Series 4 USB AVRs (ATMEGAxxU4) ++ * \li Series 2 USB AVRs (AT90USBxx2, ATMEGAxxU2) ++ * \li Series AU XMEGA AVRs (ATXMEGAxxxAxU) ++ * \li Series B XMEGA AVRs (ATXMEGAxxxBx) ++ * \li Series C XMEGA AVRs (ATXMEGAxxxCx) ++ * ++ * \section Sec_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>Audio Class</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>Standard Audio Device</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF Audio Class Specification \n ++ * USB-MIDI Audio Class Extension Specification \n ++ * General MIDI Specification</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * MIDI demonstration application. This gives a simple reference ++ * application for implementing the USB-MIDI class in USB devices. ++ * It is built upon the USB Audio class. ++ * ++ * Joystick movements are translated into note on/off messages and ++ * are sent to the host PC as MIDI streams which can be read by any ++ * MIDI program supporting MIDI IN devices. ++ * ++ * If the HWB is not pressed, channel 1 (default piano) is used. If ++ * the HWB is pressed, then channel 10 (default percussion) is selected. ++ * ++ * This device implements MIDI-THRU mode, with the IN MIDI data being ++ * generated by the device itself. OUT MIDI data is discarded. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Device/LowLevel/MIDI/asf.xml index 000000000,000000000..477b7d749 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/MIDI/asf.xml @@@ -1,0 -1,0 +1,62 @@@ ++<asf xmlversion="1.0"> ++ <project caption="MIDI Device Demo (Low Level APIs)" id="lufa.demos.device.lowlevel.midi.example.avr8"> ++ <require idref="lufa.demos.device.lowlevel.midi"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <project caption="MIDI Device Demo (Low Level APIs)" id="lufa.demos.device.lowlevel.midi.example.xmega"> ++ <require idref="lufa.demos.device.lowlevel.midi"/> ++ <require idref="lufa.boards.dummy.xmega"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atxmega128a1u"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="32000000UL"/> ++ <build type="define" name="F_USB" value="48000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.device.lowlevel.midi" caption="MIDI Device Demo (Low Level APIs)"> ++ <info type="description" value="summary"> ++ MIDI device demo, implementing a basic USB MIDI device that can send messages to the host. This demo uses the Low Level LUFA APIs to manually implement a USB Class for demonstration purposes without using the simpler in-built LUFA Class Driver APIs. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Low Level APIs"/> ++ <keyword value="USB Device"/> ++ <keyword value="MIDI Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="MIDI.txt"/> ++ ++ <build type="c-source" value="MIDI.c"/> ++ <build type="c-source" value="Descriptors.c"/> ++ <build type="header-file" value="MIDI.h"/> ++ <build type="header-file" value="Descriptors.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ <require idref="lufa.drivers.board.buttons"/> ++ <require idref="lufa.drivers.board.joystick"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Device/LowLevel/MIDI/doxyfile index 000000000,000000000..e7bfea0c0 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/MIDI/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - MIDI 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Device/LowLevel/MIDI/makefile index 000000000,000000000..5f98afa2a new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/MIDI/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = MIDI ++SRC = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Device/LowLevel/MassStorage/Config/AppConfig.h index 000000000,000000000..b18b2c414 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/MassStorage/Config/AppConfig.h @@@ -1,0 -1,0 +1,50 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief Application Configuration Header File ++ * ++ * This is a header file which is be used to configure some of ++ * the application's compile time options, as an alternative to ++ * specifying the compile time constants supplied through a ++ * makefile or build system. ++ * ++ * For information on what each token does, refer to the ++ * \ref Sec_Options section of the application documentation. ++ */ ++ ++#ifndef _APP_CONFIG_H_ ++#define _APP_CONFIG_H_ ++ ++ #define TOTAL_LUNS 1 ++ ++ #define DISK_READ_ONLY false ++ ++#endif diff --cc lib/lufa/Demos/Device/LowLevel/MassStorage/Config/LUFAConfig.h index 000000000,000000000..0ec4635eb new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/MassStorage/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,126 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++ #define USB_DEVICE_ONLY ++// #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++ #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #elif (ARCH == ARCH_XMEGA) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_RC32MCLKSRC | USB_OPT_BUSEVENT_PRIHIGH) ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++ #define MAX_ENDPOINT_INDEX 4 ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Device/LowLevel/MassStorage/Descriptors.c index 000000000,000000000..115a7482c new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/MassStorage/Descriptors.c @@@ -1,0 -1,0 +1,194 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special ++ * computer-readable structures which the host requests upon device enumeration, to determine ++ * the device's capabilities and functions. ++ */ ++ ++#include "Descriptors.h" ++ ++ ++/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall ++ * device characteristics, including the supported USB version, control endpoint size and the ++ * number of device configurations. The descriptor is read out by the USB host when the enumeration ++ * process begins. ++ */ ++const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = ++{ ++ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, ++ ++ .USBSpecification = VERSION_BCD(1,1,0), ++ .Class = USB_CSCP_NoDeviceClass, ++ .SubClass = USB_CSCP_NoDeviceSubclass, ++ .Protocol = USB_CSCP_NoDeviceProtocol, ++ ++ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, ++ ++ .VendorID = 0x03EB, ++ .ProductID = 0x2045, ++ .ReleaseNumber = VERSION_BCD(0,0,1), ++ ++ .ManufacturerStrIndex = STRING_ID_Manufacturer, ++ .ProductStrIndex = STRING_ID_Product, ++ .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. ++ */ ++const 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 = 1, ++ ++ .ConfigurationNumber = 1, ++ .ConfigurationStrIndex = NO_DESCRIPTOR, ++ ++ .ConfigAttributes = USB_CONFIG_ATTR_RESERVED, ++ ++ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) ++ }, ++ ++ .MS_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_MassStorage, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 2, ++ ++ .Class = MS_CSCP_MassStorageClass, ++ .SubClass = MS_CSCP_SCSITransparentSubclass, ++ .Protocol = MS_CSCP_BulkOnlyTransportProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .MS_DataInEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = MASS_STORAGE_IN_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = MASS_STORAGE_IO_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++ ++ .MS_DataOutEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = MASS_STORAGE_OUT_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = MASS_STORAGE_IO_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ } ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_String_t PROGMEM LanguageString = USB_STRING_DESCRIPTOR_ARRAY(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"LUFA Mass Storage 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 uint16_t wIndex, ++ const void** const DescriptorAddress) ++{ ++ const uint8_t DescriptorType = (wValue >> 8); ++ const uint8_t DescriptorNumber = (wValue & 0xFF); ++ ++ const void* Address = NULL; ++ uint16_t Size = NO_DESCRIPTOR; ++ ++ switch (DescriptorType) ++ { ++ case DTYPE_Device: ++ Address = &DeviceDescriptor; ++ Size = sizeof(USB_Descriptor_Device_t); ++ break; ++ case DTYPE_Configuration: ++ Address = &ConfigurationDescriptor; ++ Size = sizeof(USB_Descriptor_Configuration_t); ++ break; ++ case DTYPE_String: ++ switch (DescriptorNumber) ++ { ++ case STRING_ID_Language: ++ Address = &LanguageString; ++ Size = pgm_read_byte(&LanguageString.Header.Size); ++ break; ++ case STRING_ID_Manufacturer: ++ Address = &ManufacturerString; ++ Size = pgm_read_byte(&ManufacturerString.Header.Size); ++ break; ++ case STRING_ID_Product: ++ Address = &ProductString; ++ Size = pgm_read_byte(&ProductString.Header.Size); ++ break; ++ } ++ ++ break; ++ } ++ ++ *DescriptorAddress = Address; ++ return Size; ++} ++ diff --cc lib/lufa/Demos/Device/LowLevel/MassStorage/Descriptors.h index 000000000,000000000..c8614c942 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/MassStorage/Descriptors.h @@@ -1,0 -1,0 +1,98 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * Header file for Descriptors.c. ++ */ ++ ++#ifndef _DESCRIPTORS_H_ ++#define _DESCRIPTORS_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include <avr/pgmspace.h> ++ ++ #include "Config/AppConfig.h" ++ ++ /* Macros: */ ++ /** Endpoint address of the Mass Storage device-to-host data IN endpoint. */ ++ #define MASS_STORAGE_IN_EPADDR (ENDPOINT_DIR_IN | 3) ++ ++ /** Endpoint address of the Mass Storage host-to-device data OUT endpoint. */ ++ #define MASS_STORAGE_OUT_EPADDR (ENDPOINT_DIR_OUT | 4) ++ ++ /** Size in bytes of the Mass Storage data endpoints. */ ++ #define MASS_STORAGE_IO_EPSIZE 64 ++ ++ /* 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; ++ ++ // Mass Storage Interface ++ USB_Descriptor_Interface_t MS_Interface; ++ USB_Descriptor_Endpoint_t MS_DataInEndpoint; ++ USB_Descriptor_Endpoint_t MS_DataOutEndpoint; ++ } USB_Descriptor_Configuration_t; ++ ++ /** Enum for the device interface descriptor IDs within the device. Each interface descriptor ++ * should have a unique ID index associated with it, which can be used to refer to the ++ * interface from other descriptors. ++ */ ++ enum InterfaceDescriptors_t ++ { ++ INTERFACE_ID_MassStorage = 0, /**< Mass storage interface descriptor ID */ ++ }; ++ ++ /** Enum for the device string descriptor IDs within the device. Each string descriptor should ++ * have a unique ID index associated with it, which can be used to refer to the string from ++ * other descriptors. ++ */ ++ enum StringDescriptors_t ++ { ++ STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */ ++ STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */ ++ STRING_ID_Product = 2, /**< Product string ID */ ++ }; ++ ++ /* Function Prototypes: */ ++ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ++ const uint16_t wIndex, ++ const void** const DescriptorAddress) ++ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/MassStorage/Lib/DataflashManager.c index 000000000,000000000..ebd1b39c3 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/MassStorage/Lib/DataflashManager.c @@@ -1,0 -1,0 +1,530 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * Functions to manage the physical Dataflash media, including reading and writing of ++ * blocks of data. These functions are called by the SCSI layer when data must be stored ++ * or retrieved to/from the physical storage media. If a different media is used (such ++ * as a SD card or EEPROM), functions similar to these will need to be generated. ++ */ ++ ++#define INCLUDE_FROM_DATAFLASHMANAGER_C ++#include "DataflashManager.h" ++ ++/** Writes blocks (OS blocks, not Dataflash pages) to the storage medium, the board Dataflash IC(s), from ++ * the pre-selected data OUT endpoint. This routine reads in OS sized blocks from the endpoint and writes ++ * them to the Dataflash in Dataflash page sized blocks. ++ * ++ * \param[in] BlockAddress Data block starting address for the write sequence ++ * \param[in] TotalBlocks Number of blocks of data to write ++ */ ++void DataflashManager_WriteBlocks(const uint32_t BlockAddress, ++ uint16_t TotalBlocks) ++{ ++ uint16_t CurrDFPage = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE); ++ uint16_t CurrDFPageByte = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE); ++ uint8_t CurrDFPageByteDiv16 = (CurrDFPageByte >> 4); ++ bool UsingSecondBuffer = false; ++ ++ /* Select the correct starting Dataflash IC for the block requested */ ++ Dataflash_SelectChipFromPage(CurrDFPage); ++ ++#if (DATAFLASH_PAGE_SIZE > VIRTUAL_MEMORY_BLOCK_SIZE) ++ /* Copy selected dataflash's current page contents to the Dataflash buffer */ ++ Dataflash_SendByte(DF_CMD_MAINMEMTOBUFF1); ++ Dataflash_SendAddressBytes(CurrDFPage, 0); ++ Dataflash_WaitWhileBusy(); ++#endif ++ ++ /* Send the Dataflash buffer write command */ ++ Dataflash_SendByte(DF_CMD_BUFF1WRITE); ++ Dataflash_SendAddressBytes(0, CurrDFPageByte); ++ ++ /* Wait until endpoint is ready before continuing */ ++ if (Endpoint_WaitUntilReady()) ++ return; ++ ++ while (TotalBlocks) ++ { ++ uint8_t BytesInBlockDiv16 = 0; ++ ++ /* Write an endpoint packet sized data block to the Dataflash */ ++ while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4)) ++ { ++ /* Check if the endpoint is currently empty */ ++ if (!(Endpoint_IsReadWriteAllowed())) ++ { ++ /* Clear the current endpoint bank */ ++ Endpoint_ClearOUT(); ++ ++ /* Wait until the host has sent another packet */ ++ if (Endpoint_WaitUntilReady()) ++ return; ++ } ++ ++ /* Check if end of Dataflash page reached */ ++ if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4)) ++ { ++ /* Write the Dataflash buffer contents back to the Dataflash page */ ++ Dataflash_WaitWhileBusy(); ++ Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_BUFF2TOMAINMEMWITHERASE : DF_CMD_BUFF1TOMAINMEMWITHERASE); ++ Dataflash_SendAddressBytes(CurrDFPage, 0); ++ ++ /* Reset the Dataflash buffer counter, increment the page counter */ ++ CurrDFPageByteDiv16 = 0; ++ CurrDFPage++; ++ ++ /* Once all the Dataflash ICs have had their first buffers filled, switch buffers to maintain throughput */ ++ if (Dataflash_GetSelectedChip() == DATAFLASH_CHIP_MASK(DATAFLASH_TOTALCHIPS)) ++ UsingSecondBuffer = !(UsingSecondBuffer); ++ ++ /* Select the next Dataflash chip based on the new Dataflash page index */ ++ Dataflash_SelectChipFromPage(CurrDFPage); ++ ++#if (DATAFLASH_PAGE_SIZE > VIRTUAL_MEMORY_BLOCK_SIZE) ++ /* If less than one Dataflash page remaining, copy over the existing page to preserve trailing data */ ++ if ((TotalBlocks * (VIRTUAL_MEMORY_BLOCK_SIZE >> 4)) < (DATAFLASH_PAGE_SIZE >> 4)) ++ { ++ /* Copy selected dataflash's current page contents to the Dataflash buffer */ ++ Dataflash_WaitWhileBusy(); ++ Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_MAINMEMTOBUFF2 : DF_CMD_MAINMEMTOBUFF1); ++ Dataflash_SendAddressBytes(CurrDFPage, 0); ++ Dataflash_WaitWhileBusy(); ++ } ++#endif ++ ++ /* Send the Dataflash buffer write command */ ++ Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_BUFF2WRITE : DF_CMD_BUFF1WRITE); ++ Dataflash_SendAddressBytes(0, 0); ++ } ++ ++ /* Write one 16-byte chunk of data to the Dataflash */ ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ Dataflash_SendByte(Endpoint_Read_8()); ++ ++ /* Increment the Dataflash page 16 byte block counter */ ++ CurrDFPageByteDiv16++; ++ ++ /* Increment the block 16 byte block counter */ ++ BytesInBlockDiv16++; ++ ++ /* Check if the current command is being aborted by the host */ ++ if (IsMassStoreReset) ++ return; ++ } ++ ++ /* Decrement the blocks remaining counter */ ++ TotalBlocks--; ++ } ++ ++ /* Write the Dataflash buffer contents back to the Dataflash page */ ++ Dataflash_WaitWhileBusy(); ++ Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_BUFF2TOMAINMEMWITHERASE : DF_CMD_BUFF1TOMAINMEMWITHERASE); ++ Dataflash_SendAddressBytes(CurrDFPage, 0x00); ++ Dataflash_WaitWhileBusy(); ++ ++ /* If the endpoint is empty, clear it ready for the next packet from the host */ ++ if (!(Endpoint_IsReadWriteAllowed())) ++ Endpoint_ClearOUT(); ++ ++ /* Deselect all Dataflash chips */ ++ Dataflash_DeselectChip(); ++} ++ ++/** Reads blocks (OS blocks, not Dataflash pages) from the storage medium, the board Dataflash IC(s), into ++ * the pre-selected data IN endpoint. This routine reads in Dataflash page sized blocks from the Dataflash ++ * and writes them in OS sized blocks to the endpoint. ++ * ++ * \param[in] BlockAddress Data block starting address for the read sequence ++ * \param[in] TotalBlocks Number of blocks of data to read ++ */ ++void DataflashManager_ReadBlocks(const uint32_t BlockAddress, ++ uint16_t TotalBlocks) ++{ ++ uint16_t CurrDFPage = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE); ++ uint16_t CurrDFPageByte = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE); ++ uint8_t CurrDFPageByteDiv16 = (CurrDFPageByte >> 4); ++ ++ /* Select the correct starting Dataflash IC for the block requested */ ++ Dataflash_SelectChipFromPage(CurrDFPage); ++ ++ /* Send the Dataflash main memory page read command */ ++ Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD); ++ Dataflash_SendAddressBytes(CurrDFPage, CurrDFPageByte); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ ++ /* Wait until endpoint is ready before continuing */ ++ if (Endpoint_WaitUntilReady()) ++ return; ++ ++ while (TotalBlocks) ++ { ++ uint8_t BytesInBlockDiv16 = 0; ++ ++ /* Read an endpoint packet sized data block from the Dataflash */ ++ while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4)) ++ { ++ /* Check if the endpoint is currently full */ ++ if (!(Endpoint_IsReadWriteAllowed())) ++ { ++ /* Clear the endpoint bank to send its contents to the host */ ++ Endpoint_ClearIN(); ++ ++ /* Wait until the endpoint is ready for more data */ ++ if (Endpoint_WaitUntilReady()) ++ return; ++ } ++ ++ /* Check if end of Dataflash page reached */ ++ if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4)) ++ { ++ /* Reset the Dataflash buffer counter, increment the page counter */ ++ CurrDFPageByteDiv16 = 0; ++ CurrDFPage++; ++ ++ /* Select the next Dataflash chip based on the new Dataflash page index */ ++ Dataflash_SelectChipFromPage(CurrDFPage); ++ ++ /* Send the Dataflash main memory page read command */ ++ Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD); ++ Dataflash_SendAddressBytes(CurrDFPage, 0); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ } ++ ++ /* Read one 16-byte chunk of data from the Dataflash */ ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ Endpoint_Write_8(Dataflash_ReceiveByte()); ++ ++ /* Increment the Dataflash page 16 byte block counter */ ++ CurrDFPageByteDiv16++; ++ ++ /* Increment the block 16 byte block counter */ ++ BytesInBlockDiv16++; ++ ++ /* Check if the current command is being aborted by the host */ ++ if (IsMassStoreReset) ++ return; ++ } ++ ++ /* Decrement the blocks remaining counter */ ++ TotalBlocks--; ++ } ++ ++ /* If the endpoint is full, send its contents to the host */ ++ if (!(Endpoint_IsReadWriteAllowed())) ++ Endpoint_ClearIN(); ++ ++ /* Deselect all Dataflash chips */ ++ Dataflash_DeselectChip(); ++} ++ ++/** Writes blocks (OS blocks, not Dataflash pages) to the storage medium, the board Dataflash IC(s), from ++ * the given RAM buffer. This routine reads in OS sized blocks from the buffer and writes them to the ++ * Dataflash in Dataflash page sized blocks. This can be linked to FAT libraries to write files to the ++ * Dataflash. ++ * ++ * \param[in] BlockAddress Data block starting address for the write sequence ++ * \param[in] TotalBlocks Number of blocks of data to write ++ * \param[in] BufferPtr Pointer to the data source RAM buffer ++ */ ++void DataflashManager_WriteBlocks_RAM(const uint32_t BlockAddress, ++ uint16_t TotalBlocks, ++ uint8_t* BufferPtr) ++{ ++ uint16_t CurrDFPage = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE); ++ uint16_t CurrDFPageByte = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE); ++ uint8_t CurrDFPageByteDiv16 = (CurrDFPageByte >> 4); ++ bool UsingSecondBuffer = false; ++ ++ /* Select the correct starting Dataflash IC for the block requested */ ++ Dataflash_SelectChipFromPage(CurrDFPage); ++ ++#if (DATAFLASH_PAGE_SIZE > VIRTUAL_MEMORY_BLOCK_SIZE) ++ /* Copy selected dataflash's current page contents to the Dataflash buffer */ ++ Dataflash_SendByte(DF_CMD_MAINMEMTOBUFF1); ++ Dataflash_SendAddressBytes(CurrDFPage, 0); ++ Dataflash_WaitWhileBusy(); ++#endif ++ ++ /* Send the Dataflash buffer write command */ ++ Dataflash_SendByte(DF_CMD_BUFF1WRITE); ++ Dataflash_SendAddressBytes(0, CurrDFPageByte); ++ ++ while (TotalBlocks) ++ { ++ uint8_t BytesInBlockDiv16 = 0; ++ ++ /* Write an endpoint packet sized data block to the Dataflash */ ++ while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4)) ++ { ++ /* Check if end of Dataflash page reached */ ++ if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4)) ++ { ++ /* Write the Dataflash buffer contents back to the Dataflash page */ ++ Dataflash_WaitWhileBusy(); ++ Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_BUFF2TOMAINMEMWITHERASE : DF_CMD_BUFF1TOMAINMEMWITHERASE); ++ Dataflash_SendAddressBytes(CurrDFPage, 0); ++ ++ /* Reset the Dataflash buffer counter, increment the page counter */ ++ CurrDFPageByteDiv16 = 0; ++ CurrDFPage++; ++ ++ /* Once all the Dataflash ICs have had their first buffers filled, switch buffers to maintain throughput */ ++ if (Dataflash_GetSelectedChip() == DATAFLASH_CHIP_MASK(DATAFLASH_TOTALCHIPS)) ++ UsingSecondBuffer = !(UsingSecondBuffer); ++ ++ /* Select the next Dataflash chip based on the new Dataflash page index */ ++ Dataflash_SelectChipFromPage(CurrDFPage); ++ ++#if (DATAFLASH_PAGE_SIZE > VIRTUAL_MEMORY_BLOCK_SIZE) ++ /* If less than one Dataflash page remaining, copy over the existing page to preserve trailing data */ ++ if ((TotalBlocks * (VIRTUAL_MEMORY_BLOCK_SIZE >> 4)) < (DATAFLASH_PAGE_SIZE >> 4)) ++ { ++ /* Copy selected dataflash's current page contents to the Dataflash buffer */ ++ Dataflash_WaitWhileBusy(); ++ Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_MAINMEMTOBUFF2 : DF_CMD_MAINMEMTOBUFF1); ++ Dataflash_SendAddressBytes(CurrDFPage, 0); ++ Dataflash_WaitWhileBusy(); ++ } ++#endif ++ ++ /* Send the Dataflash buffer write command */ ++ Dataflash_ToggleSelectedChipCS(); ++ Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_BUFF2WRITE : DF_CMD_BUFF1WRITE); ++ Dataflash_SendAddressBytes(0, 0); ++ } ++ ++ /* Write one 16-byte chunk of data to the Dataflash */ ++ for (uint8_t ByteNum = 0; ByteNum < 16; ByteNum++) ++ Dataflash_SendByte(*(BufferPtr++)); ++ ++ /* Increment the Dataflash page 16 byte block counter */ ++ CurrDFPageByteDiv16++; ++ ++ /* Increment the block 16 byte block counter */ ++ BytesInBlockDiv16++; ++ } ++ ++ /* Decrement the blocks remaining counter */ ++ TotalBlocks--; ++ } ++ ++ /* Write the Dataflash buffer contents back to the Dataflash page */ ++ Dataflash_WaitWhileBusy(); ++ Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_BUFF2TOMAINMEMWITHERASE : DF_CMD_BUFF1TOMAINMEMWITHERASE); ++ Dataflash_SendAddressBytes(CurrDFPage, 0x00); ++ Dataflash_WaitWhileBusy(); ++ ++ /* Deselect all Dataflash chips */ ++ Dataflash_DeselectChip(); ++} ++ ++/** Reads blocks (OS blocks, not Dataflash pages) from the storage medium, the board Dataflash IC(s), into ++ * the preallocated RAM buffer. This routine reads in Dataflash page sized blocks from the Dataflash ++ * and writes them in OS sized blocks to the given buffer. This can be linked to FAT libraries to read ++ * the files stored on the Dataflash. ++ * ++ * \param[in] BlockAddress Data block starting address for the read sequence ++ * \param[in] TotalBlocks Number of blocks of data to read ++ * \param[out] BufferPtr Pointer to the data destination RAM buffer ++ */ ++void DataflashManager_ReadBlocks_RAM(const uint32_t BlockAddress, ++ uint16_t TotalBlocks, ++ uint8_t* BufferPtr) ++{ ++ uint16_t CurrDFPage = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE); ++ uint16_t CurrDFPageByte = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE); ++ uint8_t CurrDFPageByteDiv16 = (CurrDFPageByte >> 4); ++ ++ /* Select the correct starting Dataflash IC for the block requested */ ++ Dataflash_SelectChipFromPage(CurrDFPage); ++ ++ /* Send the Dataflash main memory page read command */ ++ Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD); ++ Dataflash_SendAddressBytes(CurrDFPage, CurrDFPageByte); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ ++ while (TotalBlocks) ++ { ++ uint8_t BytesInBlockDiv16 = 0; ++ ++ /* Read an endpoint packet sized data block from the Dataflash */ ++ while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4)) ++ { ++ /* Check if end of Dataflash page reached */ ++ if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4)) ++ { ++ /* Reset the Dataflash buffer counter, increment the page counter */ ++ CurrDFPageByteDiv16 = 0; ++ CurrDFPage++; ++ ++ /* Select the next Dataflash chip based on the new Dataflash page index */ ++ Dataflash_SelectChipFromPage(CurrDFPage); ++ ++ /* Send the Dataflash main memory page read command */ ++ Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD); ++ Dataflash_SendAddressBytes(CurrDFPage, 0); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ Dataflash_SendByte(0x00); ++ } ++ ++ /* Read one 16-byte chunk of data from the Dataflash */ ++ for (uint8_t ByteNum = 0; ByteNum < 16; ByteNum++) ++ *(BufferPtr++) = Dataflash_ReceiveByte(); ++ ++ /* Increment the Dataflash page 16 byte block counter */ ++ CurrDFPageByteDiv16++; ++ ++ /* Increment the block 16 byte block counter */ ++ BytesInBlockDiv16++; ++ } ++ ++ /* Decrement the blocks remaining counter */ ++ TotalBlocks--; ++ } ++ ++ /* Deselect all Dataflash chips */ ++ Dataflash_DeselectChip(); ++} ++ ++/** Disables the Dataflash memory write protection bits on the board Dataflash ICs, if enabled. */ ++void DataflashManager_ResetDataflashProtections(void) ++{ ++ /* Select first Dataflash chip, send the read status register command */ ++ Dataflash_SelectChip(DATAFLASH_CHIP1); ++ Dataflash_SendByte(DF_CMD_GETSTATUS); ++ ++ /* Check if sector protection is enabled */ ++ if (Dataflash_ReceiveByte() & DF_STATUS_SECTORPROTECTION_ON) ++ { ++ Dataflash_ToggleSelectedChipCS(); ++ ++ /* Send the commands to disable sector protection */ ++ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[0]); ++ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[1]); ++ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[2]); ++ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[3]); ++ } ++ ++ /* Select second Dataflash chip (if present on selected board), send read status register command */ ++ #if (DATAFLASH_TOTALCHIPS == 2) ++ Dataflash_SelectChip(DATAFLASH_CHIP2); ++ Dataflash_SendByte(DF_CMD_GETSTATUS); ++ ++ /* Check if sector protection is enabled */ ++ if (Dataflash_ReceiveByte() & DF_STATUS_SECTORPROTECTION_ON) ++ { ++ Dataflash_ToggleSelectedChipCS(); ++ ++ /* Send the commands to disable sector protection */ ++ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[0]); ++ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[1]); ++ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[2]); ++ Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[3]); ++ } ++ #endif ++ ++ /* Deselect current Dataflash chip */ ++ Dataflash_DeselectChip(); ++} ++ ++/** Performs a simple test on the attached Dataflash IC(s) to ensure that they are working. ++ * ++ * \return Boolean \c true if all media chips are working, \c false otherwise ++ */ ++bool DataflashManager_CheckDataflashOperation(void) ++{ ++ uint8_t ReturnByte; ++ ++ /* Test first Dataflash IC is present and responding to commands */ ++ Dataflash_SelectChip(DATAFLASH_CHIP1); ++ Dataflash_SendByte(DF_CMD_READMANUFACTURERDEVICEINFO); ++ ReturnByte = Dataflash_ReceiveByte(); ++ Dataflash_DeselectChip(); ++ ++ /* If returned data is invalid, fail the command */ ++ if (ReturnByte != DF_MANUFACTURER_ATMEL) ++ return false; ++ ++ #if (DATAFLASH_TOTALCHIPS == 2) ++ /* Test second Dataflash IC is present and responding to commands */ ++ Dataflash_SelectChip(DATAFLASH_CHIP2); ++ Dataflash_SendByte(DF_CMD_READMANUFACTURERDEVICEINFO); ++ ReturnByte = Dataflash_ReceiveByte(); ++ Dataflash_DeselectChip(); ++ ++ /* If returned data is invalid, fail the command */ ++ if (ReturnByte != DF_MANUFACTURER_ATMEL) ++ return false; ++ #endif ++ ++ return true; ++} ++ diff --cc lib/lufa/Demos/Device/LowLevel/MassStorage/Lib/DataflashManager.h index 000000000,000000000..bfb7b55c5 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/MassStorage/Lib/DataflashManager.h @@@ -1,0 -1,0 +1,86 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 DataflashManager.c. ++ */ ++ ++#ifndef _DATAFLASH_MANAGER_H_ ++#define _DATAFLASH_MANAGER_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ ++ #include "../MassStorage.h" ++ #include "../Descriptors.h" ++ ++ #include <LUFA/Common/Common.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Drivers/Board/Dataflash.h> ++ ++ /* Preprocessor Checks: */ ++ #if (DATAFLASH_PAGE_SIZE % 16) ++ #error Dataflash page size must be a multiple of 16 bytes. ++ #endif ++ ++ /* Defines: */ ++ /** Total number of bytes of the storage medium, comprised of one or more Dataflash ICs. */ ++ #define VIRTUAL_MEMORY_BYTES ((uint32_t)DATAFLASH_PAGES * DATAFLASH_PAGE_SIZE * DATAFLASH_TOTALCHIPS) ++ ++ /** Block size of the device. This is kept at 512 to remain compatible with the OS despite the underlying ++ * storage media (Dataflash) using a different native block size. Do not change this value. ++ */ ++ #define VIRTUAL_MEMORY_BLOCK_SIZE 512 ++ ++ /** Total number of blocks of the virtual memory for reporting to the host as the device's total capacity. Do not ++ * change this value; change VIRTUAL_MEMORY_BYTES instead to alter the media size. ++ */ ++ #define VIRTUAL_MEMORY_BLOCKS (VIRTUAL_MEMORY_BYTES / VIRTUAL_MEMORY_BLOCK_SIZE) ++ ++ /** Blocks in each LUN, calculated from the total capacity divided by the total number of Logical Units in the device. */ ++ #define LUN_MEDIA_BLOCKS (VIRTUAL_MEMORY_BLOCKS / TOTAL_LUNS) ++ ++ /* Function Prototypes: */ ++ void DataflashManager_WriteBlocks(const uint32_t BlockAddress, ++ uint16_t TotalBlocks); ++ void DataflashManager_ReadBlocks(const uint32_t BlockAddress, ++ uint16_t TotalBlocks); ++ void DataflashManager_WriteBlocks_RAM(const uint32_t BlockAddress, ++ uint16_t TotalBlocks, ++ uint8_t* BufferPtr) ATTR_NON_NULL_PTR_ARG(3); ++ void DataflashManager_ReadBlocks_RAM(const uint32_t BlockAddress, ++ uint16_t TotalBlocks, ++ uint8_t* BufferPtr) ATTR_NON_NULL_PTR_ARG(3); ++ void DataflashManager_ResetDataflashProtections(void); ++ bool DataflashManager_CheckDataflashOperation(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/MassStorage/Lib/SCSI.c index 000000000,000000000..bb5775ca6 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/MassStorage/Lib/SCSI.c @@@ -1,0 -1,0 +1,344 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * SCSI command processing routines, for SCSI commands issued by the host. Mass Storage ++ * devices use a thin "Bulk-Only Transport" protocol for issuing commands and status information, ++ * which wrap around standard SCSI device commands for controlling the actual storage medium. ++ */ ++ ++#define INCLUDE_FROM_SCSI_C ++#include "SCSI.h" ++ ++/** Structure to hold the SCSI response data to a SCSI INQUIRY command. This gives information about the device's ++ * features and capabilities. ++ */ ++static const SCSI_Inquiry_Response_t InquiryData = ++ { ++ .DeviceType = DEVICE_TYPE_BLOCK, ++ .PeripheralQualifier = 0, ++ ++ .Removable = true, ++ ++ .Version = 0, ++ ++ .ResponseDataFormat = 2, ++ .NormACA = false, ++ .TrmTsk = false, ++ .AERC = false, ++ ++ .AdditionalLength = 0x1F, ++ ++ .SoftReset = false, ++ .CmdQue = false, ++ .Linked = false, ++ .Sync = false, ++ .WideBus16Bit = false, ++ .WideBus32Bit = false, ++ .RelAddr = false, ++ ++ .VendorID = "LUFA", ++ .ProductID = "Dataflash Disk", ++ .RevisionID = {'0','.','0','0'}, ++ }; ++ ++/** Structure to hold the sense data for the last issued SCSI command, which is returned to the host after a SCSI REQUEST SENSE ++ * command is issued. This gives information on exactly why the last command failed to complete. ++ */ ++static SCSI_Request_Sense_Response_t SenseData = ++ { ++ .ResponseCode = 0x70, ++ .AdditionalLength = 0x0A, ++ }; ++ ++ ++/** Main routine to process the SCSI command located in the Command Block Wrapper read from the host. This dispatches ++ * to the appropriate SCSI command handling routine if the issued command is supported by the device, else it returns ++ * a command failure due to a ILLEGAL REQUEST. ++ * ++ * \return Boolean \c true if the command completed successfully, \c false otherwise ++ */ ++bool SCSI_DecodeSCSICommand(void) ++{ ++ bool CommandSuccess = false; ++ ++ /* Run the appropriate SCSI command hander function based on the passed command */ ++ switch (CommandBlock.SCSICommandData[0]) ++ { ++ case SCSI_CMD_INQUIRY: ++ CommandSuccess = SCSI_Command_Inquiry(); ++ break; ++ case SCSI_CMD_REQUEST_SENSE: ++ CommandSuccess = SCSI_Command_Request_Sense(); ++ break; ++ case SCSI_CMD_READ_CAPACITY_10: ++ CommandSuccess = SCSI_Command_Read_Capacity_10(); ++ break; ++ case SCSI_CMD_SEND_DIAGNOSTIC: ++ CommandSuccess = SCSI_Command_Send_Diagnostic(); ++ break; ++ case SCSI_CMD_WRITE_10: ++ CommandSuccess = SCSI_Command_ReadWrite_10(DATA_WRITE); ++ break; ++ case SCSI_CMD_READ_10: ++ CommandSuccess = SCSI_Command_ReadWrite_10(DATA_READ); ++ break; ++ case SCSI_CMD_MODE_SENSE_6: ++ CommandSuccess = SCSI_Command_ModeSense_6(); ++ break; ++ case SCSI_CMD_START_STOP_UNIT: ++ case SCSI_CMD_TEST_UNIT_READY: ++ case SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL: ++ case SCSI_CMD_VERIFY_10: ++ /* These commands should just succeed, no handling required */ ++ CommandSuccess = true; ++ CommandBlock.DataTransferLength = 0; ++ break; ++ default: ++ /* Update the SENSE key to reflect the invalid command */ ++ SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST, ++ SCSI_ASENSE_INVALID_COMMAND, ++ SCSI_ASENSEQ_NO_QUALIFIER); ++ break; ++ } ++ ++ /* Check if command was successfully processed */ ++ if (CommandSuccess) ++ { ++ SCSI_SET_SENSE(SCSI_SENSE_KEY_GOOD, ++ SCSI_ASENSE_NO_ADDITIONAL_INFORMATION, ++ SCSI_ASENSEQ_NO_QUALIFIER); ++ ++ return true; ++ } ++ ++ return false; ++} ++ ++/** Command processing for an issued SCSI INQUIRY command. This command returns information about the device's features ++ * and capabilities to the host. ++ * ++ * \return Boolean \c true if the command completed successfully, \c false otherwise. ++ */ ++static bool SCSI_Command_Inquiry(void) ++{ ++ uint16_t AllocationLength = SwapEndian_16(*(uint16_t*)&CommandBlock.SCSICommandData[3]); ++ uint16_t BytesTransferred = MIN(AllocationLength, sizeof(InquiryData)); ++ ++ /* Only the standard INQUIRY data is supported, check if any optional INQUIRY bits set */ ++ if ((CommandBlock.SCSICommandData[1] & ((1 << 0) | (1 << 1))) || ++ CommandBlock.SCSICommandData[2]) ++ { ++ /* Optional but unsupported bits set - update the SENSE key and fail the request */ ++ SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST, ++ SCSI_ASENSE_INVALID_FIELD_IN_CDB, ++ SCSI_ASENSEQ_NO_QUALIFIER); ++ ++ return false; ++ } ++ ++ /* Write the INQUIRY data to the endpoint */ ++ Endpoint_Write_Stream_LE(&InquiryData, BytesTransferred, NULL); ++ ++ /* Pad out remaining bytes with 0x00 */ ++ Endpoint_Null_Stream((AllocationLength - BytesTransferred), NULL); ++ ++ /* Finalize the stream transfer to send the last packet */ ++ Endpoint_ClearIN(); ++ ++ /* Succeed the command and update the bytes transferred counter */ ++ CommandBlock.DataTransferLength -= BytesTransferred; ++ ++ return true; ++} ++ ++/** Command processing for an issued SCSI REQUEST SENSE command. This command returns information about the last issued command, ++ * including the error code and additional error information so that the host can determine why a command failed to complete. ++ * ++ * \return Boolean \c true if the command completed successfully, \c false otherwise. ++ */ ++static bool SCSI_Command_Request_Sense(void) ++{ ++ uint8_t AllocationLength = CommandBlock.SCSICommandData[4]; ++ uint8_t BytesTransferred = MIN(AllocationLength, sizeof(SenseData)); ++ ++ /* Send the SENSE data - this indicates to the host the status of the last command */ ++ Endpoint_Write_Stream_LE(&SenseData, BytesTransferred, NULL); ++ ++ /* Pad out remaining bytes with 0x00 */ ++ Endpoint_Null_Stream((AllocationLength - BytesTransferred), NULL); ++ ++ /* Finalize the stream transfer to send the last packet */ ++ Endpoint_ClearIN(); ++ ++ /* Succeed the command and update the bytes transferred counter */ ++ CommandBlock.DataTransferLength -= BytesTransferred; ++ ++ return true; ++} ++ ++/** Command processing for an issued SCSI READ CAPACITY (10) command. This command returns information about the device's capacity ++ * on the selected Logical Unit (drive), as a number of OS-sized blocks. ++ * ++ * \return Boolean \c true if the command completed successfully, \c false otherwise. ++ */ ++static bool SCSI_Command_Read_Capacity_10(void) ++{ ++ /* Send the total number of logical blocks in the current LUN */ ++ Endpoint_Write_32_BE(LUN_MEDIA_BLOCKS - 1); ++ ++ /* Send the logical block size of the device (must be 512 bytes) */ ++ Endpoint_Write_32_BE(VIRTUAL_MEMORY_BLOCK_SIZE); ++ ++ /* Check if the current command is being aborted by the host */ ++ if (IsMassStoreReset) ++ return false; ++ ++ /* Send the endpoint data packet to the host */ ++ Endpoint_ClearIN(); ++ ++ /* Succeed the command and update the bytes transferred counter */ ++ CommandBlock.DataTransferLength -= 8; ++ ++ return true; ++} ++ ++/** Command processing for an issued SCSI SEND DIAGNOSTIC command. This command performs a quick check of the Dataflash ICs on the ++ * board, and indicates if they are present and functioning correctly. Only the Self-Test portion of the diagnostic command is ++ * supported. ++ * ++ * \return Boolean \c true if the command completed successfully, \c false otherwise. ++ */ ++static bool SCSI_Command_Send_Diagnostic(void) ++{ ++ /* Check to see if the SELF TEST bit is not set */ ++ if (!(CommandBlock.SCSICommandData[1] & (1 << 2))) ++ { ++ /* Only self-test supported - update SENSE key and fail the command */ ++ SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST, ++ SCSI_ASENSE_INVALID_FIELD_IN_CDB, ++ SCSI_ASENSEQ_NO_QUALIFIER); ++ ++ return false; ++ } ++ ++ /* Check to see if all attached Dataflash ICs are functional */ ++ if (!(DataflashManager_CheckDataflashOperation())) ++ { ++ /* Update SENSE key with a hardware error condition and return command fail */ ++ SCSI_SET_SENSE(SCSI_SENSE_KEY_HARDWARE_ERROR, ++ SCSI_ASENSE_NO_ADDITIONAL_INFORMATION, ++ SCSI_ASENSEQ_NO_QUALIFIER); ++ ++ return false; ++ } ++ ++ /* Succeed the command and update the bytes transferred counter */ ++ CommandBlock.DataTransferLength = 0; ++ ++ return true; ++} ++ ++/** Command processing for an issued SCSI READ (10) or WRITE (10) command. This command reads in the block start address ++ * and total number of blocks to process, then calls the appropriate low-level Dataflash routine to handle the actual ++ * reading and writing of the data. ++ * ++ * \param[in] IsDataRead Indicates if the command is a READ (10) command or WRITE (10) command (DATA_READ or DATA_WRITE) ++ * ++ * \return Boolean \c true if the command completed successfully, \c false otherwise. ++ */ ++static bool SCSI_Command_ReadWrite_10(const bool IsDataRead) ++{ ++ uint32_t BlockAddress; ++ uint16_t TotalBlocks; ++ ++ /* Check if the disk is write protected or not */ ++ if ((IsDataRead == DATA_WRITE) && DISK_READ_ONLY) ++ { ++ /* Block address is invalid, update SENSE key and return command fail */ ++ SCSI_SET_SENSE(SCSI_SENSE_KEY_DATA_PROTECT, ++ SCSI_ASENSE_WRITE_PROTECTED, ++ SCSI_ASENSEQ_NO_QUALIFIER); ++ ++ return false; ++ } ++ ++ BlockAddress = SwapEndian_32(*(uint32_t*)&CommandBlock.SCSICommandData[2]); ++ TotalBlocks = SwapEndian_16(*(uint16_t*)&CommandBlock.SCSICommandData[7]); ++ ++ /* Check if the block address is outside the maximum allowable value for the LUN */ ++ if (BlockAddress >= LUN_MEDIA_BLOCKS) ++ { ++ /* Block address is invalid, update SENSE key and return command fail */ ++ SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST, ++ SCSI_ASENSE_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE, ++ SCSI_ASENSEQ_NO_QUALIFIER); ++ ++ return false; ++ } ++ ++ #if (TOTAL_LUNS > 1) ++ /* Adjust the given block address to the real media address based on the selected LUN */ ++ BlockAddress += ((uint32_t)CommandBlock.LUN * LUN_MEDIA_BLOCKS); ++ #endif ++ ++ /* Determine if the packet is a READ (10) or WRITE (10) command, call appropriate function */ ++ if (IsDataRead == DATA_READ) ++ DataflashManager_ReadBlocks(BlockAddress, TotalBlocks); ++ else ++ DataflashManager_WriteBlocks(BlockAddress, TotalBlocks); ++ ++ /* Update the bytes transferred counter and succeed the command */ ++ CommandBlock.DataTransferLength -= ((uint32_t)TotalBlocks * VIRTUAL_MEMORY_BLOCK_SIZE); ++ ++ return true; ++} ++ ++/** Command processing for an issued SCSI MODE SENSE (6) command. This command returns various informational pages about ++ * the SCSI device, as well as the device's Write Protect status. ++ * ++ * \return Boolean \c true if the command completed successfully, \c false otherwise. ++ */ ++static bool SCSI_Command_ModeSense_6(void) ++{ ++ /* Send an empty header response with the Write Protect flag status */ ++ Endpoint_Write_8(0x00); ++ Endpoint_Write_8(0x00); ++ Endpoint_Write_8(DISK_READ_ONLY ? 0x80 : 0x00); ++ Endpoint_Write_8(0x00); ++ Endpoint_ClearIN(); ++ ++ /* Update the bytes transferred counter and succeed the command */ ++ CommandBlock.DataTransferLength -= 4; ++ ++ return true; ++} ++ diff --cc lib/lufa/Demos/Device/LowLevel/MassStorage/Lib/SCSI.h index 000000000,000000000..b1488b492 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/MassStorage/Lib/SCSI.h @@@ -1,0 -1,0 +1,150 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 SCSI.c. ++ */ ++ ++#ifndef _SCSI_H_ ++#define _SCSI_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/pgmspace.h> ++ ++ #include <LUFA/Common/Common.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ ++ #include "../MassStorage.h" ++ #include "../Descriptors.h" ++ #include "DataflashManager.h" ++ ++ /* Macros: */ ++ /** Macro to set the current SCSI sense data to the given key, additional sense code and additional sense qualifier. This ++ * is for convenience, as it allows for all three sense values (returned upon request to the host to give information about ++ * the last command failure) in a quick and easy manner. ++ * ++ * \param[in] Key New SCSI sense key to set the sense code to ++ * \param[in] Acode New SCSI additional sense key to set the additional sense code to ++ * \param[in] Aqual New SCSI additional sense key qualifier to set the additional sense qualifier code to ++ */ ++ #define SCSI_SET_SENSE(Key, Acode, Aqual) do { SenseData.SenseKey = (Key); \ ++ SenseData.AdditionalSenseCode = (Acode); \ ++ SenseData.AdditionalSenseQualifier = (Aqual); } while (0) ++ ++ /** Macro for the \ref SCSI_Command_ReadWrite_10() function, to indicate that data is to be read from the storage medium. */ ++ #define DATA_READ true ++ ++ /** Macro for the \ref SCSI_Command_ReadWrite_10() function, to indicate that data is to be written to the storage medium. */ ++ #define DATA_WRITE false ++ ++ /** Value for the DeviceType entry in the SCSI_Inquiry_Response_t enum, indicating a Block Media device. */ ++ #define DEVICE_TYPE_BLOCK 0x00 ++ ++ /** Value for the DeviceType entry in the SCSI_Inquiry_Response_t enum, indicating a CD-ROM device. */ ++ #define DEVICE_TYPE_CDROM 0x05 ++ ++ /* Type Defines: */ ++ /** Type define for a SCSI response structure to a SCSI INQUIRY command. For details of the ++ * structure contents, refer to the SCSI specifications. ++ */ ++ typedef struct ++ { ++ unsigned DeviceType : 5; ++ unsigned PeripheralQualifier : 3; ++ ++ unsigned Reserved : 7; ++ unsigned Removable : 1; ++ ++ uint8_t Version; ++ ++ unsigned ResponseDataFormat : 4; ++ unsigned Reserved2 : 1; ++ unsigned NormACA : 1; ++ unsigned TrmTsk : 1; ++ unsigned AERC : 1; ++ ++ uint8_t AdditionalLength; ++ uint8_t Reserved3[2]; ++ ++ unsigned SoftReset : 1; ++ unsigned CmdQue : 1; ++ unsigned Reserved4 : 1; ++ unsigned Linked : 1; ++ unsigned Sync : 1; ++ unsigned WideBus16Bit : 1; ++ unsigned WideBus32Bit : 1; ++ unsigned RelAddr : 1; ++ ++ uint8_t VendorID[8]; ++ uint8_t ProductID[16]; ++ uint8_t RevisionID[4]; ++ } MS_SCSI_Inquiry_Response_t; ++ ++ /** Type define for a SCSI sense structure to a SCSI REQUEST SENSE command. For details of the ++ * structure contents, refer to the SCSI specifications. ++ */ ++ typedef struct ++ { ++ uint8_t ResponseCode; ++ ++ uint8_t SegmentNumber; ++ ++ unsigned SenseKey : 4; ++ unsigned Reserved : 1; ++ unsigned ILI : 1; ++ unsigned EOM : 1; ++ unsigned FileMark : 1; ++ ++ uint8_t Information[4]; ++ uint8_t AdditionalLength; ++ uint8_t CmdSpecificInformation[4]; ++ uint8_t AdditionalSenseCode; ++ uint8_t AdditionalSenseQualifier; ++ uint8_t FieldReplaceableUnitCode; ++ uint8_t SenseKeySpecific[3]; ++ } MS_SCSI_Request_Sense_Response_t; ++ ++ /* Function Prototypes: */ ++ bool SCSI_DecodeSCSICommand(void); ++ ++ #if defined(INCLUDE_FROM_SCSI_C) ++ static bool SCSI_Command_Inquiry(void); ++ static bool SCSI_Command_Request_Sense(void); ++ static bool SCSI_Command_Read_Capacity_10(void); ++ static bool SCSI_Command_Send_Diagnostic(void); ++ static bool SCSI_Command_ReadWrite_10(const bool IsDataRead); ++ static bool SCSI_Command_ModeSense_6(void); ++ #endif ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/MassStorage/MassStorage.c index 000000000,000000000..f30969c67 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/MassStorage/MassStorage.c @@@ -1,0 -1,0 +1,332 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 Mass Storage demo. This file contains the main tasks of the demo and ++ * is responsible for the initial application hardware configuration. ++ */ ++ ++#define INCLUDE_FROM_MASSSTORAGE_C ++#include "MassStorage.h" ++ ++/** Structure to hold the latest Command Block Wrapper issued by the host, containing a SCSI command to execute. */ ++MS_CommandBlockWrapper_t CommandBlock; ++ ++/** Structure to hold the latest Command Status Wrapper to return to the host, containing the status of the last issued command. */ ++MS_CommandStatusWrapper_t CommandStatus = { .Signature = MS_CSW_SIGNATURE }; ++ ++/** Flag to asynchronously abort any in-progress data transfers upon the reception of a mass storage reset command. */ ++volatile bool IsMassStoreReset = false; ++ ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ MassStorage_Task(); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#elif (ARCH == ARCH_XMEGA) ++ /* Start the PLL to multiply the 2MHz RC oscillator to 32MHz and switch the CPU core to run from it */ ++ XMEGACLK_StartPLL(CLOCK_SRC_INT_RC2MHZ, 2000000, F_CPU); ++ XMEGACLK_SetCPUClockSource(CLOCK_SRC_PLL); ++ ++ /* Start the 32MHz internal RC oscillator and start the DFLL to increase it to 48MHz using the USB SOF as a reference */ ++ XMEGACLK_StartInternalOscillator(CLOCK_SRC_INT_RC32MHZ); ++ XMEGACLK_StartDFLL(CLOCK_SRC_INT_RC32MHZ, DFLL_REF_INT_USBSOF, F_USB); ++ ++ PMIC.CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm; ++#endif ++ ++ /* Hardware Initialization */ ++ LEDs_Init(); ++ Dataflash_Init(); ++ USB_Init(); ++ ++ /* Check if the Dataflash is working, abort if not */ ++ if (!(DataflashManager_CheckDataflashOperation())) ++ { ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ for(;;); ++ } ++ ++ /* Clear Dataflash sector protections, if enabled */ ++ DataflashManager_ResetDataflashProtections(); ++} ++ ++/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs. */ ++void EVENT_USB_Device_Connect(void) ++{ ++ /* Indicate USB enumerating */ ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++ ++ /* Reset the MSReset flag upon connection */ ++ IsMassStoreReset = false; ++} ++ ++/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via ++ * the status LEDs and stops the Mass Storage management task. ++ */ ++void EVENT_USB_Device_Disconnect(void) ++{ ++ /* Indicate USB not ready */ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration ++ * of the USB device after enumeration - the device endpoints are configured and the Mass Storage management task started. ++ */ ++void EVENT_USB_Device_ConfigurationChanged(void) ++{ ++ bool ConfigSuccess = true; ++ ++ /* Setup Mass Storage Data Endpoints */ ++ ConfigSuccess &= Endpoint_ConfigureEndpoint(MASS_STORAGE_IN_EPADDR, EP_TYPE_BULK, MASS_STORAGE_IO_EPSIZE, 1); ++ ConfigSuccess &= Endpoint_ConfigureEndpoint(MASS_STORAGE_OUT_EPADDR, EP_TYPE_BULK, MASS_STORAGE_IO_EPSIZE, 1); ++ ++ /* Indicate endpoint configuration success or failure */ ++ LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); ++} ++ ++/** Event handler for the USB_ControlRequest event. This is used to catch and process control requests sent to ++ * the device from the USB host before passing along unhandled control requests to the library for processing ++ * internally. ++ */ ++void EVENT_USB_Device_ControlRequest(void) ++{ ++ /* Process UFI specific control requests */ ++ switch (USB_ControlRequest.bRequest) ++ { ++ case MS_REQ_MassStorageReset: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) ++ { ++ Endpoint_ClearSETUP(); ++ Endpoint_ClearStatusStage(); ++ ++ /* Indicate that the current transfer should be aborted */ ++ IsMassStoreReset = true; ++ } ++ ++ break; ++ case MS_REQ_GetMaxLUN: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) ++ { ++ Endpoint_ClearSETUP(); ++ ++ /* Indicate to the host the number of supported LUNs (virtual disks) on the device */ ++ Endpoint_Write_8(TOTAL_LUNS - 1); ++ ++ Endpoint_ClearIN(); ++ Endpoint_ClearStatusStage(); ++ } ++ ++ break; ++ } ++} ++ ++/** Task to manage the Mass Storage interface, reading in Command Block Wrappers from the host, processing the SCSI commands they ++ * contain, and returning Command Status Wrappers back to the host to indicate the success or failure of the last issued command. ++ */ ++void MassStorage_Task(void) ++{ ++ /* Device must be connected and configured for the task to run */ ++ if (USB_DeviceState != DEVICE_STATE_Configured) ++ return; ++ ++ /* Process sent command block from the host if one has been sent */ ++ if (ReadInCommandBlock()) ++ { ++ /* Indicate busy */ ++ LEDs_SetAllLEDs(LEDMASK_USB_BUSY); ++ ++ /* Check direction of command, select Data IN endpoint if data is from the device */ ++ if (CommandBlock.Flags & MS_COMMAND_DIR_DATA_IN) ++ Endpoint_SelectEndpoint(MASS_STORAGE_IN_EPADDR); ++ ++ /* Decode the received SCSI command, set returned status code */ ++ CommandStatus.Status = SCSI_DecodeSCSICommand() ? MS_SCSI_COMMAND_Pass : MS_SCSI_COMMAND_Fail; ++ ++ /* Load in the CBW tag into the CSW to link them together */ ++ CommandStatus.Tag = CommandBlock.Tag; ++ ++ /* Load in the data residue counter into the CSW */ ++ CommandStatus.DataTransferResidue = CommandBlock.DataTransferLength; ++ ++ /* Stall the selected data pipe if command failed (if data is still to be transferred) */ ++ if ((CommandStatus.Status == MS_SCSI_COMMAND_Fail) && (CommandStatus.DataTransferResidue)) ++ Endpoint_StallTransaction(); ++ ++ /* Return command status block to the host */ ++ ReturnCommandStatus(); ++ ++ /* Indicate ready */ ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++ } ++ ++ /* Check if a Mass Storage Reset occurred */ ++ if (IsMassStoreReset) ++ { ++ /* Reset the data endpoint banks */ ++ Endpoint_ResetEndpoint(MASS_STORAGE_OUT_EPADDR); ++ Endpoint_ResetEndpoint(MASS_STORAGE_IN_EPADDR); ++ ++ Endpoint_SelectEndpoint(MASS_STORAGE_OUT_EPADDR); ++ Endpoint_ClearStall(); ++ Endpoint_ResetDataToggle(); ++ Endpoint_SelectEndpoint(MASS_STORAGE_IN_EPADDR); ++ Endpoint_ClearStall(); ++ Endpoint_ResetDataToggle(); ++ ++ /* Clear the abort transfer flag */ ++ IsMassStoreReset = false; ++ } ++} ++ ++/** Function to read in a command block from the host, via the bulk data OUT endpoint. This function reads in the next command block ++ * if one has been issued, and performs validation to ensure that the block command is valid. ++ * ++ * \return Boolean \c true if a valid command block has been read in from the endpoint, \c false otherwise ++ */ ++static bool ReadInCommandBlock(void) ++{ ++ uint16_t BytesTransferred; ++ ++ /* Select the Data Out endpoint */ ++ Endpoint_SelectEndpoint(MASS_STORAGE_OUT_EPADDR); ++ ++ /* Abort if no command has been sent from the host */ ++ if (!(Endpoint_IsOUTReceived())) ++ return false; ++ ++ /* Read in command block header */ ++ BytesTransferred = 0; ++ while (Endpoint_Read_Stream_LE(&CommandBlock, (sizeof(CommandBlock) - sizeof(CommandBlock.SCSICommandData)), ++ &BytesTransferred) == ENDPOINT_RWSTREAM_IncompleteTransfer) ++ { ++ /* Check if the current command is being aborted by the host */ ++ if (IsMassStoreReset) ++ return false; ++ } ++ ++ /* Verify the command block - abort if invalid */ ++ if ((CommandBlock.Signature != MS_CBW_SIGNATURE) || ++ (CommandBlock.LUN >= TOTAL_LUNS) || ++ (CommandBlock.Flags & 0x1F) || ++ (CommandBlock.SCSICommandLength == 0) || ++ (CommandBlock.SCSICommandLength > sizeof(CommandBlock.SCSICommandData))) ++ { ++ /* Stall both data pipes until reset by host */ ++ Endpoint_StallTransaction(); ++ Endpoint_SelectEndpoint(MASS_STORAGE_IN_EPADDR); ++ Endpoint_StallTransaction(); ++ ++ return false; ++ } ++ ++ /* Read in command block command data */ ++ BytesTransferred = 0; ++ while (Endpoint_Read_Stream_LE(&CommandBlock.SCSICommandData, CommandBlock.SCSICommandLength, ++ &BytesTransferred) == ENDPOINT_RWSTREAM_IncompleteTransfer) ++ { ++ /* Check if the current command is being aborted by the host */ ++ if (IsMassStoreReset) ++ return false; ++ } ++ ++ /* Finalize the stream transfer to send the last packet */ ++ Endpoint_ClearOUT(); ++ ++ return true; ++} ++ ++/** Returns the filled Command Status Wrapper back to the host via the bulk data IN endpoint, waiting for the host to clear any ++ * stalled data endpoints as needed. ++ */ ++static void ReturnCommandStatus(void) ++{ ++ uint16_t BytesTransferred; ++ ++ /* Select the Data Out endpoint */ ++ Endpoint_SelectEndpoint(MASS_STORAGE_OUT_EPADDR); ++ ++ /* While data pipe is stalled, wait until the host issues a control request to clear the stall */ ++ while (Endpoint_IsStalled()) ++ { ++ /* Check if the current command is being aborted by the host */ ++ if (IsMassStoreReset) ++ return; ++ } ++ ++ /* Select the Data In endpoint */ ++ Endpoint_SelectEndpoint(MASS_STORAGE_IN_EPADDR); ++ ++ /* While data pipe is stalled, wait until the host issues a control request to clear the stall */ ++ while (Endpoint_IsStalled()) ++ { ++ /* Check if the current command is being aborted by the host */ ++ if (IsMassStoreReset) ++ return; ++ } ++ ++ /* Write the CSW to the endpoint */ ++ BytesTransferred = 0; ++ while (Endpoint_Write_Stream_LE(&CommandStatus, sizeof(CommandStatus), ++ &BytesTransferred) == ENDPOINT_RWSTREAM_IncompleteTransfer) ++ { ++ /* Check if the current command is being aborted by the host */ ++ if (IsMassStoreReset) ++ return; ++ } ++ ++ /* Finalize the stream transfer to send the last packet */ ++ Endpoint_ClearIN(); ++} ++ diff --cc lib/lufa/Demos/Device/LowLevel/MassStorage/MassStorage.h index 000000000,000000000..f59e18735 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/MassStorage/MassStorage.h @@@ -1,0 -1,0 +1,92 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 MassStorage.c. ++ */ ++ ++#ifndef _MASS_STORAGE_H_ ++#define _MASS_STORAGE_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ ++ #include "Descriptors.h" ++ ++ #include "Lib/SCSI.h" ++ #include "Lib/DataflashManager.h" ++ #include "Config/AppConfig.h" ++ ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/Board/Dataflash.h> ++ #include <LUFA/Platform/Platform.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) ++ ++ /** LED mask for the library LED driver, to indicate that the USB interface is busy. */ ++ #define LEDMASK_USB_BUSY LEDS_LED2 ++ ++ /* Global Variables: */ ++ extern MS_CommandBlockWrapper_t CommandBlock; ++ extern MS_CommandStatusWrapper_t CommandStatus; ++ extern volatile bool IsMassStoreReset; ++ ++ /* Function Prototypes: */ ++ void SetupHardware(void); ++ void MassStorage_Task(void); ++ ++ void EVENT_USB_Device_Connect(void); ++ void EVENT_USB_Device_Disconnect(void); ++ void EVENT_USB_Device_ConfigurationChanged(void); ++ void EVENT_USB_Device_ControlRequest(void); ++ ++ #if defined(INCLUDE_FROM_MASSSTORAGE_C) ++ static bool ReadInCommandBlock(void); ++ static void ReturnCommandStatus(void); ++ #endif ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/MassStorage/MassStorage.txt index 000000000,000000000..b070dc83a new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/MassStorage/MassStorage.txt @@@ -1,0 -1,0 +1,100 @@@ ++/** \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 Mass Storage Device Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * \li Series 6 USB AVRs (AT90USBxxx6) ++ * \li Series 4 USB AVRs (ATMEGAxxU4) ++ * \li Series 2 USB AVRs (AT90USBxx2, ATMEGAxxU2) ++ * \li Series AU XMEGA AVRs (ATXMEGAxxxAxU) ++ * \li Series B XMEGA AVRs (ATXMEGAxxxBx) ++ * \li Series C XMEGA AVRs (ATXMEGAxxxCx) ++ * ++ * \section Sec_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>Mass Storage Device</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>Bulk-Only Transport</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF Mass Storage Standard \n ++ * USB Bulk-Only Transport Standard \n ++ * SCSI Primary Commands Specification \n ++ * SCSI Block Commands Specification</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Mass Storage device demonstration application. This gives a simple ++ * reference application for implementing a USB Mass Storage device using ++ * the basic USB UFI drivers in all modern OSes (i.e. no special drivers ++ * required). ++ * ++ * On start-up the system will automatically enumerate and function as an ++ * external mass storage device which may be formatted and used in the same ++ * manner as commercial USB Mass Storage devices. ++ * ++ * You will need to format the mass storage drive upon first run of this ++ * demonstration - as the device acts only as a data block transport between ++ * the host and the storage media, it does not matter what file system is used, ++ * as the data interpretation is performed by the host and not the USB device. ++ * ++ * This demo is not restricted to only a single LUN (logical disk); by changing ++ * the TOTAL_LUNS value in DataflashManager.h, any number of LUNs can be used ++ * (from 1 to 255), with each LUN being allocated an equal portion of the available ++ * Dataflash memory. ++ * ++ * The USB control endpoint is managed entirely by the library using endpoint ++ * interrupts, as the INTERRUPT_CONTROL_ENDPOINT option is enabled. This allows for ++ * the host to reset the Mass Storage device state during long transfers without ++ * the need for complicated polling logic. ++ * ++ * \section Sec_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> ++ * <th><b>Define Name:</b></th> ++ * <th><b>Location:</b></th> ++ * <th><b>Description:</b></th> ++ * </tr> ++ * <tr> ++ * <td>TOTAL_LUNS</td> ++ * <td>AppConfig.h</td> ++ * <td>Total number of Logical Units (drives) in the device. The total device capacity is shared equally between each drive ++ * - this can be set to any positive non-zero amount.</td> ++ * </tr> ++ * <tr> ++ * <td>DISK_READ_ONLY</td> ++ * <td>AppConfig.h</td> ++ * <td>Indicates if the disk should be write protected or not.</td> ++ * </tr> ++ * </table> ++ */ ++ diff --cc lib/lufa/Demos/Device/LowLevel/MassStorage/asf.xml index 000000000,000000000..68ae2c28e new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/MassStorage/asf.xml @@@ -1,0 -1,0 +1,67 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Mass Storage Device Demo (Low Level APIs)" id="lufa.demos.device.lowlevel.mass_storage.example.avr8"> ++ <require idref="lufa.demos.device.lowlevel.mass_storage"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <project caption="Mass Storage Device Demo (Low Level APIs)" id="lufa.demos.device.lowlevel.mass_storage.example.xmega"> ++ <require idref="lufa.demos.device.lowlevel.mass_storage"/> ++ <require idref="lufa.boards.dummy.xmega"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atxmega128a1u"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="32000000UL"/> ++ <build type="define" name="F_USB" value="48000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.device.lowlevel.mass_storage" caption="Mass Storage Device Demo (Low Level APIs)"> ++ <info type="description" value="summary"> ++ Mass Storage device demo, implementing a basic USB storage disk using a Dataflash memory IC. This demo uses the Low Level LUFA APIs to manually implement a USB Class for demonstration purposes without using the simpler in-built LUFA Class Driver APIs. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Low Level APIs"/> ++ <keyword value="USB Device"/> ++ <keyword value="Mass Storage Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="MassStorage.txt"/> ++ ++ <build type="c-source" value="MassStorage.c"/> ++ <build type="c-source" value="Descriptors.c"/> ++ <build type="c-source" value="Lib/DataflashManager.c"/> ++ <build type="c-source" value="Lib/SCSI.c"/> ++ <build type="header-file" value="MassStorage.h"/> ++ <build type="header-file" value="Descriptors.h"/> ++ <build type="header-file" value="Lib/DataflashManager.h"/> ++ <build type="header-file" value="Lib/SCSI.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="module-config" subtype="required-header-file" value="AppConfig.h"/> ++ <build type="header-file" value="Config/AppConfig.h"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ <require idref="lufa.drivers.board.dataflash"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Device/LowLevel/MassStorage/doxyfile index 000000000,000000000..84c2d3d0b new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/MassStorage/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Mass Storage 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Device/LowLevel/MassStorage/makefile index 000000000,000000000..58646499f new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/MassStorage/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = MassStorage ++SRC = $(TARGET).c Descriptors.c Lib/DataflashManager.c Lib/SCSI.c $(LUFA_SRC_USB) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Device/LowLevel/Mouse/Config/LUFAConfig.h index 000000000,000000000..299d2ec85 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/Mouse/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,126 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++ #define USB_DEVICE_ONLY ++// #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #elif (ARCH == ARCH_XMEGA) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_RC32MCLKSRC | USB_OPT_BUSEVENT_PRIHIGH) ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++ #define MAX_ENDPOINT_INDEX 1 ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Device/LowLevel/Mouse/Descriptors.c index 000000000,000000000..368ddc66e new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/Mouse/Descriptors.c @@@ -1,0 -1,0 +1,240 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special ++ * computer-readable structures which the host requests upon device enumeration, to determine ++ * the device's capabilities and functions. ++ */ ++ ++#include "Descriptors.h" ++ ++/** HID class report descriptor. This is a special descriptor constructed with values from the ++ * USBIF HID class specification to describe the reports and capabilities of the HID device. This ++ * descriptor is parsed by the host and its contents used to determine what data (and in what encoding) ++ * the device will send, and what it may be sent back from the host. Refer to the HID specification for ++ * more details on HID report descriptors. ++ */ ++const USB_Descriptor_HIDReport_Datatype_t PROGMEM MouseReport[] = ++{ ++ HID_RI_USAGE_PAGE(8, 0x01), /* Generic Desktop */ ++ HID_RI_USAGE(8, 0x02), /* Mouse */ ++ HID_RI_COLLECTION(8, 0x01), /* Application */ ++ HID_RI_USAGE(8, 0x01), /* Pointer */ ++ HID_RI_COLLECTION(8, 0x00), /* Physical */ ++ HID_RI_USAGE_PAGE(8, 0x09), /* Button */ ++ HID_RI_USAGE_MINIMUM(8, 0x01), ++ HID_RI_USAGE_MAXIMUM(8, 0x03), ++ HID_RI_LOGICAL_MINIMUM(8, 0x00), ++ HID_RI_LOGICAL_MAXIMUM(8, 0x01), ++ HID_RI_REPORT_COUNT(8, 0x03), ++ HID_RI_REPORT_SIZE(8, 0x01), ++ HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), ++ HID_RI_REPORT_COUNT(8, 0x01), ++ HID_RI_REPORT_SIZE(8, 0x05), ++ HID_RI_INPUT(8, HID_IOF_CONSTANT), ++ HID_RI_USAGE_PAGE(8, 0x01), /* Generic Desktop */ ++ HID_RI_USAGE(8, 0x30), /* Usage X */ ++ HID_RI_USAGE(8, 0x31), /* Usage Y */ ++ HID_RI_LOGICAL_MINIMUM(8, -1), ++ HID_RI_LOGICAL_MAXIMUM(8, 1), ++ HID_RI_PHYSICAL_MINIMUM(8, -1), ++ HID_RI_PHYSICAL_MAXIMUM(8, 1), ++ HID_RI_REPORT_COUNT(8, 0x02), ++ HID_RI_REPORT_SIZE(8, 0x08), ++ HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE), ++ HID_RI_END_COLLECTION(0), ++ HID_RI_END_COLLECTION(0), ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = ++{ ++ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, ++ ++ .USBSpecification = VERSION_BCD(1,1,0), ++ .Class = USB_CSCP_NoDeviceClass, ++ .SubClass = USB_CSCP_NoDeviceSubclass, ++ .Protocol = USB_CSCP_NoDeviceProtocol, ++ ++ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, ++ ++ .VendorID = 0x03EB, ++ .ProductID = 0x2041, ++ .ReleaseNumber = VERSION_BCD(0,0,1), ++ ++ .ManufacturerStrIndex = STRING_ID_Manufacturer, ++ .ProductStrIndex = STRING_ID_Product, ++ .SerialNumStrIndex = NO_DESCRIPTOR, ++ ++ .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. ++ */ ++const 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 = 1, ++ ++ .ConfigurationNumber = 1, ++ .ConfigurationStrIndex = NO_DESCRIPTOR, ++ ++ .ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED), ++ ++ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) ++ }, ++ ++ .HID_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_Mouse, ++ .AlternateSetting = 0x00, ++ ++ .TotalEndpoints = 1, ++ ++ .Class = HID_CSCP_HIDClass, ++ .SubClass = HID_CSCP_BootSubclass, ++ .Protocol = HID_CSCP_MouseBootProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .HID_MouseHID = ++ { ++ .Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID}, ++ ++ .HIDSpec = VERSION_BCD(1,1,1), ++ .CountryCode = 0x00, ++ .TotalReportDescriptors = 1, ++ .HIDReportType = HID_DTYPE_Report, ++ .HIDReportLength = sizeof(MouseReport) ++ }, ++ ++ .HID_ReportINEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = MOUSE_EPADDR, ++ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = MOUSE_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ } ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_String_t PROGMEM LanguageString = USB_STRING_DESCRIPTOR_ARRAY(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"LUFA 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 uint16_t wIndex, ++ const void** const DescriptorAddress) ++{ ++ const uint8_t DescriptorType = (wValue >> 8); ++ const uint8_t DescriptorNumber = (wValue & 0xFF); ++ ++ const void* Address = NULL; ++ uint16_t Size = NO_DESCRIPTOR; ++ ++ switch (DescriptorType) ++ { ++ case DTYPE_Device: ++ Address = &DeviceDescriptor; ++ Size = sizeof(USB_Descriptor_Device_t); ++ break; ++ case DTYPE_Configuration: ++ Address = &ConfigurationDescriptor; ++ Size = sizeof(USB_Descriptor_Configuration_t); ++ break; ++ case DTYPE_String: ++ switch (DescriptorNumber) ++ { ++ case STRING_ID_Language: ++ Address = &LanguageString; ++ Size = pgm_read_byte(&LanguageString.Header.Size); ++ break; ++ case STRING_ID_Manufacturer: ++ Address = &ManufacturerString; ++ Size = pgm_read_byte(&ManufacturerString.Header.Size); ++ break; ++ case STRING_ID_Product: ++ Address = &ProductString; ++ Size = pgm_read_byte(&ProductString.Header.Size); ++ break; ++ } ++ ++ break; ++ case HID_DTYPE_HID: ++ Address = &ConfigurationDescriptor.HID_MouseHID; ++ Size = sizeof(USB_HID_Descriptor_HID_t); ++ break; ++ case HID_DTYPE_Report: ++ Address = &MouseReport; ++ Size = sizeof(MouseReport); ++ break; ++ } ++ ++ *DescriptorAddress = Address; ++ return Size; ++} ++ diff --cc lib/lufa/Demos/Device/LowLevel/Mouse/Descriptors.h index 000000000,000000000..b3fc96890 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/Mouse/Descriptors.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * Header file for Descriptors.c. ++ */ ++ ++#ifndef _DESCRIPTORS_H_ ++#define _DESCRIPTORS_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include <avr/pgmspace.h> ++ ++ /* Macros: */ ++ /** Endpoint address of the Mouse HID reporting IN endpoint. */ ++ #define MOUSE_EPADDR (ENDPOINT_DIR_IN | 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; ++ ++ // Mouse HID Interface ++ USB_Descriptor_Interface_t HID_Interface; ++ USB_HID_Descriptor_HID_t HID_MouseHID; ++ USB_Descriptor_Endpoint_t HID_ReportINEndpoint; ++ } USB_Descriptor_Configuration_t; ++ ++ /** Enum for the device interface descriptor IDs within the device. Each interface descriptor ++ * should have a unique ID index associated with it, which can be used to refer to the ++ * interface from other descriptors. ++ */ ++ enum InterfaceDescriptors_t ++ { ++ INTERFACE_ID_Mouse = 0, /**< Mouse interface descriptor ID */ ++ }; ++ ++ /** Enum for the device string descriptor IDs within the device. Each string descriptor should ++ * have a unique ID index associated with it, which can be used to refer to the string from ++ * other descriptors. ++ */ ++ enum StringDescriptors_t ++ { ++ STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */ ++ STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */ ++ STRING_ID_Product = 2, /**< Product string ID */ ++ }; ++ ++ /* Function Prototypes: */ ++ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ++ const uint16_t wIndex, ++ const void** const DescriptorAddress) ++ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/Mouse/Mouse.c index 000000000,000000000..0065a9bb4 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/Mouse/Mouse.c @@@ -1,0 -1,0 +1,311 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 Mouse demo. This file contains the main tasks of the demo and ++ * is responsible for the initial application hardware configuration. ++ */ ++ ++#include "Mouse.h" ++ ++/** Indicates what report mode the host has requested, true for normal HID reporting mode, \c false for special boot ++ * protocol reporting mode. ++ */ ++static bool UsingReportProtocol = true; ++ ++/** Current Idle period. This is set by the host via a Set Idle HID class request to silence the device's reports ++ * for either the entire idle duration, or until the report status changes (e.g. the user moves the mouse). ++ */ ++static uint16_t IdleCount = 0; ++ ++/** Current Idle period remaining. When the IdleCount value is set, this tracks the remaining number of idle ++ * milliseconds. This is separate to the IdleCount timer and is incremented and compared as the host may request ++ * the current idle period via a Get Idle HID class request, thus its value must be preserved. ++ */ ++static uint16_t IdleMSRemaining = 0; ++ ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ Mouse_Task(); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#elif (ARCH == ARCH_XMEGA) ++ /* Start the PLL to multiply the 2MHz RC oscillator to 32MHz and switch the CPU core to run from it */ ++ XMEGACLK_StartPLL(CLOCK_SRC_INT_RC2MHZ, 2000000, F_CPU); ++ XMEGACLK_SetCPUClockSource(CLOCK_SRC_PLL); ++ ++ /* Start the 32MHz internal RC oscillator and start the DFLL to increase it to 48MHz using the USB SOF as a reference */ ++ XMEGACLK_StartInternalOscillator(CLOCK_SRC_INT_RC32MHZ); ++ XMEGACLK_StartDFLL(CLOCK_SRC_INT_RC32MHZ, DFLL_REF_INT_USBSOF, F_USB); ++ ++ PMIC.CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm; ++#endif ++ ++ /* Hardware Initialization */ ++ Joystick_Init(); ++ LEDs_Init(); ++ Buttons_Init(); ++ USB_Init(); ++} ++ ++/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and ++ * starts the library USB task to begin the enumeration and USB management process. ++ */ ++void EVENT_USB_Device_Connect(void) ++{ ++ /* Indicate USB enumerating */ ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++ ++ /* Default to report protocol on connect */ ++ UsingReportProtocol = true; ++} ++ ++/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via ++ * the status LEDs and stops the USB management and Mouse reporting tasks. ++ */ ++void EVENT_USB_Device_Disconnect(void) ++{ ++ /* Indicate USB not ready */ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_ConfigurationChanged event. This is fired when the host sets the current configuration ++ * of the USB device after enumeration - the device endpoints are configured and the mouse reporting task started. ++ */ ++void EVENT_USB_Device_ConfigurationChanged(void) ++{ ++ bool ConfigSuccess = true; ++ ++ /* Setup HID Report Endpoint */ ++ ConfigSuccess &= Endpoint_ConfigureEndpoint(MOUSE_EPADDR, EP_TYPE_INTERRUPT, MOUSE_EPSIZE, 1); ++ ++ /* Turn on Start-of-Frame events for tracking HID report period expiry */ ++ USB_Device_EnableSOFEvents(); ++ ++ /* Indicate endpoint configuration success or failure */ ++ LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); ++} ++ ++/** Event handler for the USB_ControlRequest event. This is used to catch and process control requests sent to ++ * the device from the USB host before passing along unhandled control requests to the library for processing ++ * internally. ++ */ ++void EVENT_USB_Device_ControlRequest(void) ++{ ++ /* Handle HID Class specific requests */ ++ switch (USB_ControlRequest.bRequest) ++ { ++ case HID_REQ_GetReport: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) ++ { ++ USB_MouseReport_Data_t MouseReportData; ++ ++ /* Create the next mouse report for transmission to the host */ ++ CreateMouseReport(&MouseReportData); ++ ++ Endpoint_ClearSETUP(); ++ ++ /* Write the report data to the control endpoint */ ++ Endpoint_Write_Control_Stream_LE(&MouseReportData, sizeof(MouseReportData)); ++ Endpoint_ClearOUT(); ++ ++ /* Clear the report data afterwards */ ++ memset(&MouseReportData, 0, sizeof(MouseReportData)); ++ } ++ ++ break; ++ case HID_REQ_GetProtocol: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) ++ { ++ Endpoint_ClearSETUP(); ++ ++ /* Write the current protocol flag to the host */ ++ Endpoint_Write_8(UsingReportProtocol); ++ ++ Endpoint_ClearIN(); ++ Endpoint_ClearStatusStage(); ++ } ++ ++ break; ++ case HID_REQ_SetProtocol: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) ++ { ++ Endpoint_ClearSETUP(); ++ Endpoint_ClearStatusStage(); ++ ++ /* Set or clear the flag depending on what the host indicates that the current Protocol should be */ ++ UsingReportProtocol = (USB_ControlRequest.wValue != 0); ++ } ++ ++ break; ++ case HID_REQ_SetIdle: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) ++ { ++ Endpoint_ClearSETUP(); ++ Endpoint_ClearStatusStage(); ++ ++ /* Get idle period in MSB, must multiply by 4 to get the duration in milliseconds */ ++ IdleCount = ((USB_ControlRequest.wValue & 0xFF00) >> 6); ++ } ++ ++ break; ++ case HID_REQ_GetIdle: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) ++ { ++ Endpoint_ClearSETUP(); ++ ++ /* Write the current idle duration to the host, must be divided by 4 before sent to host */ ++ Endpoint_Write_8(IdleCount >> 2); ++ ++ Endpoint_ClearIN(); ++ Endpoint_ClearStatusStage(); ++ } ++ ++ break; ++ } ++} ++ ++/** Event handler for the USB device Start Of Frame event. */ ++void EVENT_USB_Device_StartOfFrame(void) ++{ ++ /* One millisecond has elapsed, decrement the idle time remaining counter if it has not already elapsed */ ++ if (IdleMSRemaining) ++ IdleMSRemaining--; ++} ++ ++/** Fills the given HID report data structure with the next HID report to send to the host. ++ * ++ * \param[out] ReportData Pointer to a HID report data structure to be filled ++ */ ++void CreateMouseReport(USB_MouseReport_Data_t* const ReportData) ++{ ++ uint8_t JoyStatus_LCL = Joystick_GetStatus(); ++ uint8_t ButtonStatus_LCL = Buttons_GetStatus(); ++ ++ /* Clear the report contents */ ++ memset(ReportData, 0, sizeof(USB_MouseReport_Data_t)); ++ ++ if (JoyStatus_LCL & JOY_UP) ++ ReportData->Y = -1; ++ else if (JoyStatus_LCL & JOY_DOWN) ++ ReportData->Y = 1; ++ ++ if (JoyStatus_LCL & JOY_LEFT) ++ ReportData->X = -1; ++ else if (JoyStatus_LCL & JOY_RIGHT) ++ ReportData->X = 1; ++ ++ if (JoyStatus_LCL & JOY_PRESS) ++ ReportData->Button |= (1 << 0); ++ ++ if (ButtonStatus_LCL & BUTTONS_BUTTON1) ++ ReportData->Button |= (1 << 1); ++} ++ ++/** Sends the next HID report to the host, via the keyboard data endpoint. */ ++void SendNextReport(void) ++{ ++ static USB_MouseReport_Data_t PrevMouseReportData; ++ USB_MouseReport_Data_t MouseReportData; ++ bool SendReport; ++ ++ /* Create the next mouse report for transmission to the host */ ++ CreateMouseReport(&MouseReportData); ++ ++ /* Check to see if the report data has changed - if so a report MUST be sent */ ++ SendReport = (memcmp(&PrevMouseReportData, &MouseReportData, sizeof(USB_MouseReport_Data_t)) != 0); ++ ++ /* Override the check if the Y or X values are non-zero - we want continuous movement while the joystick ++ * is being held down (via continuous reports), otherwise the cursor will only move once per joystick toggle */ ++ if ((MouseReportData.Y != 0) || (MouseReportData.X != 0)) ++ SendReport = true; ++ ++ /* Check if the idle period is set and has elapsed */ ++ if (IdleCount && (!(IdleMSRemaining))) ++ { ++ /* Reset the idle time remaining counter */ ++ IdleMSRemaining = IdleCount; ++ ++ /* Idle period is set and has elapsed, must send a report to the host */ ++ SendReport = true; ++ } ++ ++ /* Select the Mouse Report Endpoint */ ++ Endpoint_SelectEndpoint(MOUSE_EPADDR); ++ ++ /* Check if Mouse Endpoint Ready for Read/Write and if we should send a new report */ ++ if (Endpoint_IsReadWriteAllowed() && SendReport) ++ { ++ /* Save the current report data for later comparison to check for changes */ ++ PrevMouseReportData = MouseReportData; ++ ++ /* Write Mouse Report Data */ ++ Endpoint_Write_Stream_LE(&MouseReportData, sizeof(MouseReportData), NULL); ++ ++ /* Finalize the stream transfer to send the last packet */ ++ Endpoint_ClearIN(); ++ } ++} ++ ++/** Task to manage HID report generation and transmission to the host, when in report mode. */ ++void Mouse_Task(void) ++{ ++ /* Device must be connected and configured for the task to run */ ++ if (USB_DeviceState != DEVICE_STATE_Configured) ++ return; ++ ++ /* Send the next mouse report to the host */ ++ SendNextReport(); ++} ++ diff --cc lib/lufa/Demos/Device/LowLevel/Mouse/Mouse.h index 000000000,000000000..9d72b7977 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/Mouse/Mouse.h @@@ -1,0 -1,0 +1,81 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 Mouse.c. ++ */ ++ ++#ifndef _MOUSE_H_ ++#define _MOUSE_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <stdbool.h> ++ #include <string.h> ++ ++ #include "Descriptors.h" ++ ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Drivers/Board/Joystick.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/Board/Buttons.h> ++ #include <LUFA/Platform/Platform.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 Mouse_Task(void); ++ ++ void EVENT_USB_Device_Connect(void); ++ void EVENT_USB_Device_Disconnect(void); ++ void EVENT_USB_Device_ConfigurationChanged(void); ++ void EVENT_USB_Device_ControlRequest(void); ++ void EVENT_USB_Device_StartOfFrame(void); ++ ++ void CreateMouseReport(USB_MouseReport_Data_t* const ReportData); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/Mouse/Mouse.txt index 000000000,000000000..7246ede31 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/Mouse/Mouse.txt @@@ -1,0 -1,0 +1,76 @@@ ++/** \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 Mouse Device Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * \li Series 6 USB AVRs (AT90USBxxx6) ++ * \li Series 4 USB AVRs (ATMEGAxxU4) ++ * \li Series 2 USB AVRs (AT90USBxx2, ATMEGAxxU2) ++ * \li Series AU XMEGA AVRs (ATXMEGAxxxAxU) ++ * \li Series B XMEGA AVRs (ATXMEGAxxxBx) ++ * \li Series C XMEGA AVRs (ATXMEGAxxxCx) ++ * ++ * \section Sec_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>Human Interface Device (HID)</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>N/A</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF HID Specification \n ++ * USBIF HID Usage Tables</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Low Speed Mode \n ++ * Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Mouse demonstration application. This gives a simple reference ++ * application for implementing a USB Mouse using the basic USB HID ++ * drivers in all modern OSes (i.e. no special drivers required). It is ++ * boot protocol compatible, and thus works under compatible BIOS as if ++ * it was a native mouse (e.g. PS/2). ++ * ++ * On start-up the system will automatically enumerate and function ++ * as a mouse when the USB connection to a host is present. To use ++ * the mouse, move the joystick to move the pointer, and push the ++ * joystick inwards to simulate a left-button click. The HWB serves as ++ * the right mouse button. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Device/LowLevel/Mouse/asf.xml index 000000000,000000000..ac21d0771 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/Mouse/asf.xml @@@ -1,0 -1,0 +1,62 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Mouse HID Device Demo (Low Level APIs)" id="lufa.demos.device.lowlevel.mouse.example.avr8"> ++ <require idref="lufa.demos.device.lowlevel.mouse"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <project caption="Mouse HID Device Demo (Low Level APIs)" id="lufa.demos.device.lowlevel.mouse.example.xmega"> ++ <require idref="lufa.demos.device.lowlevel.mouse"/> ++ <require idref="lufa.boards.dummy.xmega"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atxmega128a1u"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="32000000UL"/> ++ <build type="define" name="F_USB" value="48000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.device.lowlevel.mouse" caption="Mouse HID Device Demo (Low Level APIs)"> ++ <info type="description" value="summary"> ++ Mouse device demo, implementing a basic USB mouse device that can send movement information to the host. This demo uses the Low Level LUFA APIs to manually implement a USB Class for demonstration purposes without using the simpler in-built LUFA Class Driver APIs. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Low Level APIs"/> ++ <keyword value="USB Device"/> ++ <keyword value="HID Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="Mouse.txt"/> ++ ++ <build type="c-source" value="Mouse.c"/> ++ <build type="c-source" value="Descriptors.c"/> ++ <build type="header-file" value="Mouse.h"/> ++ <build type="header-file" value="Descriptors.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ <require idref="lufa.drivers.board.buttons"/> ++ <require idref="lufa.drivers.board.joystick"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Device/LowLevel/Mouse/doxyfile index 000000000,000000000..37bc83018 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/Mouse/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Device/LowLevel/Mouse/makefile index 000000000,000000000..37303b3e4 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/Mouse/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = Mouse ++SRC = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Config/AppConfig.h index 000000000,000000000..0e4d1780a new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Config/AppConfig.h @@@ -1,0 -1,0 +1,60 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief Application Configuration Header File ++ * ++ * This is a header file which is be used to configure some of ++ * the application's compile time options, as an alternative to ++ * specifying the compile time constants supplied through a ++ * makefile or build system. ++ * ++ * For information on what each token does, refer to the ++ * \ref Sec_Options section of the application documentation. ++ */ ++ ++#ifndef _APP_CONFIG_H_ ++#define _APP_CONFIG_H_ ++ ++ #define CLIENT_IP_ADDRESS { 10, 0, 0, 1} ++ #define SERVER_IP_ADDRESS { 10, 0, 0, 2} ++ ++ #define ADAPTER_MAC_ADDRESS {0x02, 0x00, 0x02, 0x00, 0x02, 0x00} ++ #define SERVER_MAC_ADDRESS {0x00, 0x01, 0x00, 0x01, 0x00, 0x01} ++ ++ #define NO_DECODE_ETHERNET ++ #define NO_DECODE_ARP ++ #define NO_DECODE_IP ++ #define NO_DECODE_ICMP ++ #define NO_DECODE_TCP ++ #define NO_DECODE_UDP ++ #define NO_DECODE_DHCP ++ ++#endif diff --cc lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Config/LUFAConfig.h index 000000000,000000000..cc828a108 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,126 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++ #define USB_DEVICE_ONLY ++// #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #elif (ARCH == ARCH_XMEGA) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_RC32MCLKSRC | USB_OPT_BUSEVENT_PRIHIGH) ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++ #define MAX_ENDPOINT_INDEX 3 ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Descriptors.c index 000000000,000000000..e42b31860 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Descriptors.c @@@ -1,0 -1,0 +1,244 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special ++ * computer-readable structures which the host requests upon device enumeration, to determine ++ * the device's capabilities and functions. ++ */ ++ ++#include "Descriptors.h" ++ ++/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall ++ * device characteristics, including the supported USB version, control endpoint size and the ++ * number of device configurations. The descriptor is read out by the USB host when the enumeration ++ * process begins. ++ */ ++const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = ++{ ++ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, ++ ++ .USBSpecification = VERSION_BCD(1,1,0), ++ .Class = CDC_CSCP_CDCClass, ++ .SubClass = CDC_CSCP_NoSpecificSubclass, ++ .Protocol = CDC_CSCP_NoSpecificProtocol, ++ ++ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, ++ ++ .VendorID = 0x03EB, ++ .ProductID = 0x204C, ++ .ReleaseNumber = VERSION_BCD(0,0,1), ++ ++ .ManufacturerStrIndex = STRING_ID_Manufacturer, ++ .ProductStrIndex = STRING_ID_Product, ++ .SerialNumStrIndex = NO_DESCRIPTOR, ++ ++ .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. ++ */ ++const 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 = 2, ++ ++ .ConfigurationNumber = 1, ++ .ConfigurationStrIndex = NO_DESCRIPTOR, ++ ++ .ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED), ++ ++ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) ++ }, ++ ++ .CDC_CCI_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_CDC_CCI, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 1, ++ ++ .Class = CDC_CSCP_CDCClass, ++ .SubClass = CDC_CSCP_ACMSubclass, ++ .Protocol = CDC_CSCP_VendorSpecificProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .CDC_Functional_Header = ++ { ++ .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface}, ++ .Subtype = CDC_DSUBTYPE_CSInterface_Header, ++ ++ .CDCSpecification = VERSION_BCD(1,1,0), ++ }, ++ ++ .CDC_Functional_ACM = ++ { ++ .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface}, ++ .Subtype = CDC_DSUBTYPE_CSInterface_ACM, ++ ++ .Capabilities = 0x00, ++ }, ++ ++ .CDC_Functional_Union = ++ { ++ .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface}, ++ .Subtype = CDC_DSUBTYPE_CSInterface_Union, ++ ++ .MasterInterfaceNumber = INTERFACE_ID_CDC_CCI, ++ .SlaveInterfaceNumber = INTERFACE_ID_CDC_DCI, ++ }, ++ ++ .CDC_NotificationEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = CDC_NOTIFICATION_EPADDR, ++ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = CDC_NOTIFICATION_EPSIZE, ++ .PollingIntervalMS = 0xFF ++ }, ++ ++ .CDC_DCI_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_CDC_DCI, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 2, ++ ++ .Class = CDC_CSCP_CDCDataClass, ++ .SubClass = CDC_CSCP_NoDataSubclass, ++ .Protocol = CDC_CSCP_NoDataProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .RNDIS_DataOutEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = CDC_RX_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = CDC_TXRX_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++ ++ .RNDIS_DataInEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = CDC_TX_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = CDC_TXRX_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ } ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_String_t PROGMEM LanguageString = USB_STRING_DESCRIPTOR_ARRAY(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"LUFA RNDIS CDC 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 uint16_t wIndex, ++ const void** const DescriptorAddress) ++{ ++ const uint8_t DescriptorType = (wValue >> 8); ++ const uint8_t DescriptorNumber = (wValue & 0xFF); ++ ++ const void* Address = NULL; ++ uint16_t Size = NO_DESCRIPTOR; ++ ++ switch (DescriptorType) ++ { ++ case DTYPE_Device: ++ Address = &DeviceDescriptor; ++ Size = sizeof(USB_Descriptor_Device_t); ++ break; ++ case DTYPE_Configuration: ++ Address = &ConfigurationDescriptor; ++ Size = sizeof(USB_Descriptor_Configuration_t); ++ break; ++ case DTYPE_String: ++ switch (DescriptorNumber) ++ { ++ case STRING_ID_Language: ++ Address = &LanguageString; ++ Size = pgm_read_byte(&LanguageString.Header.Size); ++ break; ++ case STRING_ID_Manufacturer: ++ Address = &ManufacturerString; ++ Size = pgm_read_byte(&ManufacturerString.Header.Size); ++ break; ++ case STRING_ID_Product: ++ Address = &ProductString; ++ Size = pgm_read_byte(&ProductString.Header.Size); ++ break; ++ } ++ ++ break; ++ } ++ ++ *DescriptorAddress = Address; ++ return Size; ++} ++ diff --cc lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Descriptors.h index 000000000,000000000..84c336f16 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Descriptors.h @@@ -1,0 -1,0 +1,112 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * Header file for Descriptors.c. ++ */ ++ ++#ifndef _DESCRIPTORS_H_ ++#define _DESCRIPTORS_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include <avr/pgmspace.h> ++ ++ #include "Config/AppConfig.h" ++ ++ /* Macros: */ ++ /** Endpoint address of the CDC device-to-host data IN endpoint. */ ++ #define CDC_TX_EPADDR (ENDPOINT_DIR_IN | 1) ++ ++ /** Endpoint address of the CDC host-to-device data OUT endpoint. */ ++ #define CDC_RX_EPADDR (ENDPOINT_DIR_OUT | 2) ++ ++ /** Endpoint address of the CDC device-to-host notification IN endpoint. */ ++ #define CDC_NOTIFICATION_EPADDR (ENDPOINT_DIR_IN | 3) ++ ++ /** Size in bytes of the CDC data IN and OUT endpoints. */ ++ #define CDC_TXRX_EPSIZE 64 ++ ++ /** Size in bytes of the CDC device-to-host notification IN endpoint. */ ++ #define CDC_NOTIFICATION_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; ++ ++ // RNDIS CDC Control Interface ++ USB_Descriptor_Interface_t CDC_CCI_Interface; ++ USB_CDC_Descriptor_FunctionalHeader_t CDC_Functional_Header; ++ USB_CDC_Descriptor_FunctionalACM_t CDC_Functional_ACM; ++ USB_CDC_Descriptor_FunctionalUnion_t CDC_Functional_Union; ++ USB_Descriptor_Endpoint_t CDC_NotificationEndpoint; ++ ++ // RNDIS CDC Data Interface ++ USB_Descriptor_Interface_t CDC_DCI_Interface; ++ USB_Descriptor_Endpoint_t RNDIS_DataOutEndpoint; ++ USB_Descriptor_Endpoint_t RNDIS_DataInEndpoint; ++ } USB_Descriptor_Configuration_t; ++ ++ /** Enum for the device interface descriptor IDs within the device. Each interface descriptor ++ * should have a unique ID index associated with it, which can be used to refer to the ++ * interface from other descriptors. ++ */ ++ enum InterfaceDescriptors_t ++ { ++ INTERFACE_ID_CDC_CCI = 0, /**< CDC CCI interface descriptor ID */ ++ INTERFACE_ID_CDC_DCI = 1, /**< CDC DCI interface descriptor ID */ ++ }; ++ ++ /** Enum for the device string descriptor IDs within the device. Each string descriptor should ++ * have a unique ID index associated with it, which can be used to refer to the string from ++ * other descriptors. ++ */ ++ enum StringDescriptors_t ++ { ++ STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */ ++ STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */ ++ STRING_ID_Product = 2, /**< Product string ID */ ++ }; ++ ++ /* Function Prototypes: */ ++ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ++ const uint16_t wIndex, ++ const void** const DescriptorAddress) ++ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/RNDISEthernet/LUFA RNDIS.inf index 000000000,000000000..f34e55f99 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/RNDISEthernet/LUFA RNDIS.inf @@@ -1,0 -1,0 +1,59 @@@ ++; Windows LUFA RNDIS Setup File ++; Copyright (c) 2000 Microsoft Corporation ++ ++[DefaultInstall] ++CopyINF="LUFA RNDIS.inf" ++ ++[Version] ++Signature="$Windows NT$" ++Class=Net ++ClassGuid={4d36e972-e325-11ce-bfc1-08002be10318} ++Provider=%MFGNAME% ++DriverVer=7/1/2012,10.0.0.0 ++ ++[Manufacturer] ++%MFGNAME%=DeviceList, NTx86, NTamd64, NTia64 ++ ++[ControlFlags] ++ExcludeFromSelect=* ++ ++[DriverInstall] ++Characteristics=0x84 ; NCF_PHYSICAL + NCF_HAS_UI ++BusType=15 ++include=netrndis.inf ++needs=Usb_Rndis.ndi ++AddReg=Rndis_AddReg_Vista ++ ++[DriverInstall.Services] ++include=netrndis.inf ++needs=Usb_Rndis.ndi.Services ++ ++;------------------------------------------------------------------------------ ++; 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. ++;------------------------------------------------------------------------------ ++[DeviceList] ++%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_204C ++ ++[DeviceList.NTx86] ++%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_204C ++ ++[DeviceList.NTamd64] ++%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_204C ++ ++[DeviceList.NTia64] ++%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_204C ++ ++;------------------------------------------------------------------------------ ++; String Definitions ++;------------------------------------------------------------------------------ ++;Modify these strings to customize your device ++;------------------------------------------------------------------------------ ++[Strings] ++MFGNAME="http://www.lufa-lib.org" ++DESCRIPTION="LUFA USB RNDIS Demo" diff --cc lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/ARP.c index 000000000,000000000..24008705c new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/ARP.c @@@ -1,0 -1,0 +1,87 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * Address Resolution Protocol (ARP) packet handling routines. This protocol handles the ++ * conversion of physical MAC addresses to protocol IP addresses between the host and the ++ * device. ++ */ ++ ++#include "ARP.h" ++ ++/** Processes an ARP packet inside an Ethernet frame, and writes the appropriate response ++ * to the output Ethernet frame if the host is requesting the IP or MAC address of the ++ * virtual server device on the network. ++ * ++ * \param[in] InDataStart Pointer to the start of the incoming packet's ARP header ++ * \param[out] OutDataStart Pointer to the start of the outgoing packet's ARP header ++ * ++ * \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise ++ */ ++int16_t ARP_ProcessARPPacket(void* InDataStart, ++ void* OutDataStart) ++{ ++ DecodeARPHeader(InDataStart); ++ ++ ARP_Header_t* ARPHeaderIN = (ARP_Header_t*)InDataStart; ++ ARP_Header_t* ARPHeaderOUT = (ARP_Header_t*)OutDataStart; ++ ++ /* Ensure that the ARP request is a IPv4 request packet */ ++ if ((SwapEndian_16(ARPHeaderIN->ProtocolType) == ETHERTYPE_IPV4) && ++ (SwapEndian_16(ARPHeaderIN->Operation) == ARP_OPERATION_REQUEST)) ++ { ++ /* If the ARP packet is requesting the MAC or IP of the virtual webserver, return the response */ ++ if (IP_COMPARE(&ARPHeaderIN->TPA, &ServerIPAddress) || ++ MAC_COMPARE(&ARPHeaderIN->THA, &ServerMACAddress)) ++ { ++ /* Fill out the ARP response header */ ++ ARPHeaderOUT->HardwareType = ARPHeaderIN->HardwareType; ++ ARPHeaderOUT->ProtocolType = ARPHeaderIN->ProtocolType; ++ ARPHeaderOUT->HLEN = ARPHeaderIN->HLEN; ++ ARPHeaderOUT->PLEN = ARPHeaderIN->PLEN; ++ ARPHeaderOUT->Operation = SwapEndian_16(ARP_OPERATION_REPLY); ++ ++ /* Copy over the sender MAC/IP to the target fields for the response */ ++ ARPHeaderOUT->THA = ARPHeaderIN->SHA; ++ ARPHeaderOUT->TPA = ARPHeaderIN->SPA; ++ ++ /* Copy over the new sender MAC/IP - MAC and IP addresses of the virtual webserver */ ++ ARPHeaderOUT->SHA = ServerMACAddress; ++ ARPHeaderOUT->SPA = ServerIPAddress; ++ ++ /* Return the size of the response so far */ ++ return sizeof(ARP_Header_t); ++ } ++ } ++ ++ return NO_RESPONSE; ++} ++ diff --cc lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/ARP.h index 000000000,000000000..c809cbf44 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/ARP.h @@@ -1,0 -1,0 +1,78 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ARP.c. ++ */ ++ ++#ifndef _ARP_H_ ++#define _ARP_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <string.h> ++ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include "EthernetProtocols.h" ++ #include "Ethernet.h" ++ #include "ProtocolDecoders.h" ++ ++ /* Macros: */ ++ /** ARP header operation constant, indicating a request from a host for an address translation. */ ++ #define ARP_OPERATION_REQUEST 1 ++ ++ /** ARP header operation constant, indicating a reply from a host giving an address translation. */ ++ #define ARP_OPERATION_REPLY 2 ++ ++ /* Type Defines: */ ++ /** Type define for an ARP packet inside an Ethernet frame. */ ++ typedef struct ++ { ++ uint16_t HardwareType; /**< Hardware type constant, indicating the hardware used */ ++ uint16_t ProtocolType; /**< Protocol being resolved, usually ETHERTYPE_IPV4 */ ++ ++ uint8_t HLEN; /**< Length in bytes of the source/destination hardware addresses */ ++ uint8_t PLEN; /**< Length in bytes of the source/destination protocol addresses */ ++ uint16_t Operation; /**< Type of operation, either ARP_OPERATION_REQUEST or ARP_OPERATION_REPLY */ ++ ++ MAC_Address_t SHA; /**< Sender's hardware address */ ++ IP_Address_t SPA; /**< Sender's protocol address */ ++ MAC_Address_t THA; /**< Target's hardware address */ ++ IP_Address_t TPA; /**< Target's protocol address */ ++ } ARP_Header_t; ++ ++ /* Function Prototypes: */ ++ int16_t ARP_ProcessARPPacket(void* InDataStart, ++ void* OutDataStart); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/DHCP.c index 000000000,000000000..6f7b40af6 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/DHCP.c @@@ -1,0 -1,0 +1,129 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * Dynamic Host Configuration Protocol (DHCP) packet handling routines. This protocol ++ * handles the automatic IP negotiation to the host, so that the host will use the provided ++ * IP address given to it by the device. ++ */ ++ ++#include "DHCP.h" ++ ++/** Processes a DHCP packet inside an Ethernet frame, and writes the appropriate response ++ * to the output Ethernet frame if the host is requesting or accepting an IP address. ++ * ++ * \param[in] IPHeaderInStart Pointer to the start of the incoming packet's IP header ++ * \param[in] DHCPHeaderInStart Pointer to the start of the incoming packet's DHCP header ++ * \param[out] DHCPHeaderOutStart Pointer to the start of the outgoing packet's DHCP header ++ * ++ * \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise ++ */ ++int16_t DHCP_ProcessDHCPPacket(void* IPHeaderInStart, ++ void* DHCPHeaderInStart, ++ void* DHCPHeaderOutStart) ++{ ++ IP_Header_t* IPHeaderIN = (IP_Header_t*)IPHeaderInStart; ++ DHCP_Header_t* DHCPHeaderIN = (DHCP_Header_t*)DHCPHeaderInStart; ++ DHCP_Header_t* DHCPHeaderOUT = (DHCP_Header_t*)DHCPHeaderOutStart; ++ ++ uint8_t* DHCPOptionsINStart = (uint8_t*)(DHCPHeaderInStart + sizeof(DHCP_Header_t)); ++ uint8_t* DHCPOptionsOUTStart = (uint8_t*)(DHCPHeaderOutStart + sizeof(DHCP_Header_t)); ++ ++ DecodeDHCPHeader(DHCPHeaderInStart); ++ ++ /* Zero out the response DHCP packet, as much of it is legacy and left at 0 */ ++ memset(DHCPHeaderOUT, 0, sizeof(DHCP_Header_t)); ++ ++ /* Fill out the response DHCP packet */ ++ DHCPHeaderOUT->HardwareType = DHCPHeaderIN->HardwareType; ++ DHCPHeaderOUT->Operation = DHCP_OP_BOOTREPLY; ++ DHCPHeaderOUT->HardwareAddressLength = DHCPHeaderIN->HardwareAddressLength; ++ DHCPHeaderOUT->Hops = 0; ++ DHCPHeaderOUT->TransactionID = DHCPHeaderIN->TransactionID; ++ DHCPHeaderOUT->ElapsedSeconds = 0; ++ DHCPHeaderOUT->Flags = DHCPHeaderIN->Flags; ++ DHCPHeaderOUT->YourIP = ClientIPAddress; ++ memmove(&DHCPHeaderOUT->ClientHardwareAddress, &DHCPHeaderIN->ClientHardwareAddress, sizeof(MAC_Address_t)); ++ DHCPHeaderOUT->Cookie = SwapEndian_32(DHCP_MAGIC_COOKIE); ++ ++ /* Alter the incoming IP packet header so that the corrected IP source and destinations are used - this means that ++ when the response IP header is generated, it will use the corrected addresses and not the null/broatcast addresses */ ++ IPHeaderIN->SourceAddress = ClientIPAddress; ++ IPHeaderIN->DestinationAddress = ServerIPAddress; ++ ++ /* Process the incoming DHCP packet options */ ++ while (DHCPOptionsINStart[0] != DHCP_OPTION_END) ++ { ++ /* Find the Message Type DHCP option, to determine the type of DHCP packet */ ++ if (DHCPOptionsINStart[0] == DHCP_OPTION_MESSAGETYPE) ++ { ++ if ((DHCPOptionsINStart[2] == DHCP_MESSAGETYPE_DISCOVER) || (DHCPOptionsINStart[2] == DHCP_MESSAGETYPE_REQUEST)) ++ { ++ /* Fill out the response DHCP packet options for a DHCP OFFER or ACK response */ ++ ++ *(DHCPOptionsOUTStart++) = DHCP_OPTION_MESSAGETYPE; ++ *(DHCPOptionsOUTStart++) = 1; ++ *(DHCPOptionsOUTStart++) = (DHCPOptionsINStart[2] == DHCP_MESSAGETYPE_DISCOVER) ? DHCP_MESSAGETYPE_OFFER ++ : DHCP_MESSAGETYPE_ACK; ++ ++ *(DHCPOptionsOUTStart++) = DHCP_OPTION_SUBNETMASK; ++ *(DHCPOptionsOUTStart++) = sizeof(IP_Address_t); ++ *(DHCPOptionsOUTStart++) = 0xFF; ++ *(DHCPOptionsOUTStart++) = 0xFF; ++ *(DHCPOptionsOUTStart++) = 0xFF; ++ *(DHCPOptionsOUTStart++) = 0x00; ++ ++ *(DHCPOptionsOUTStart++) = DHCP_OPTION_LEASETIME; ++ *(DHCPOptionsOUTStart++) = sizeof(uint32_t); ++ /* Lease Time 86400s (ONE_DAY) */ ++ *(DHCPOptionsOUTStart++) = 0x00; ++ *(DHCPOptionsOUTStart++) = 0x01; ++ *(DHCPOptionsOUTStart++) = 0x51; ++ *(DHCPOptionsOUTStart++) = 0x80; ++ ++ *(DHCPOptionsOUTStart++) = DHCP_OPTION_DHCPSERVER; ++ *(DHCPOptionsOUTStart++) = sizeof(IP_Address_t); ++ memcpy(DHCPOptionsOUTStart, &ServerIPAddress, sizeof(IP_Address_t)); ++ DHCPOptionsOUTStart += sizeof(IP_Address_t); ++ ++ *(DHCPOptionsOUTStart++) = DHCP_OPTION_END; ++ ++ return (sizeof(DHCP_Header_t) + 18 + sizeof(IP_Address_t)); ++ } ++ } ++ ++ /* Go to the next DHCP option - skip one byte if option is a padding byte, else skip the complete option's size */ ++ DHCPOptionsINStart += ((DHCPOptionsINStart[0] == DHCP_OPTION_PAD) ? 1 : (DHCPOptionsINStart[1] + 2)); ++ } ++ ++ return NO_RESPONSE; ++} ++ diff --cc lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/DHCP.h index 000000000,000000000..5ef78469e new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/DHCP.h @@@ -1,0 -1,0 +1,131 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 DHCP.c. ++ */ ++ ++#ifndef _DHCP_H_ ++#define _DHCP_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <string.h> ++ ++ #include "EthernetProtocols.h" ++ #include "Ethernet.h" ++ #include "ProtocolDecoders.h" ++ ++ /* Macros: */ ++ /** DHCP operation constant, indicating a request from a host to a DHCP server. */ ++ #define DHCP_OP_BOOTREQUEST 0x01 ++ ++ /** DHCP operation constant, indicating a reply from a DHCP server to a host. */ ++ #define DHCP_OP_BOOTREPLY 0x02 ++ ++ /** Hardware type constant, indicating Ethernet as a carrier. */ ++ #define DHCP_HTYPE_ETHERNET 0x01 ++ ++ /** Magic boot protocol "cookie", inserted into all BOOTP packets (BOOTP is the carrier of DHCP). */ ++ #define DHCP_MAGIC_COOKIE 0x63825363 ++ ++ /** DHCP option list entry header, indicating that a subnet mask will follow. */ ++ #define DHCP_OPTION_SUBNETMASK 1 ++ ++ /** DHCP option list entry header, indicating that the Lease Time will follow. */ ++ #define DHCP_OPTION_LEASETIME 51 ++ ++ /** DHCP option list entry header, indicating that the DHCP message type constant will follow. */ ++ #define DHCP_OPTION_MESSAGETYPE 53 ++ ++ /** DHCP option list entry header, indicating that the IP address of the DHCP server will follow. */ ++ #define DHCP_OPTION_DHCPSERVER 54 ++ ++ /** DHCP option list entry header, used to pad out option data. */ ++ #define DHCP_OPTION_PAD 0 ++ ++ /** DHCP option list entry header, indicating the end of option data. */ ++ #define DHCP_OPTION_END 255 ++ ++ /** Message type constant, used in the DHCP option data field, requesting that a DHCP server offer an IP address. */ ++ #define DHCP_MESSAGETYPE_DISCOVER 1 ++ ++ /** Message type constant, used in the DHCP option data field, indicating that a DHCP server is offering an IP address. */ ++ #define DHCP_MESSAGETYPE_OFFER 2 ++ ++ /** Message type constant, used in the DHCP option data field, requesting that a DHCP server lease a given IP address. */ ++ #define DHCP_MESSAGETYPE_REQUEST 3 ++ ++ /** Message type constant, used in the DHCP option data field, declining an offered DHCP server IP address lease. */ ++ #define DHCP_MESSAGETYPE_DECLINE 4 ++ ++ /** Message type constant, used in the DHCP option data field, ACKing a host IP lease request. */ ++ #define DHCP_MESSAGETYPE_ACK 5 ++ ++ /** Message type constant, used in the DHCP option data field, NACKing a host IP lease request. */ ++ #define DHCP_MESSAGETYPE_NACK 6 ++ ++ /** Message type constant, used in the DHCP option data field, indicating that a host is releasing a leased IP address. */ ++ #define DHCP_MESSAGETYPE_RELEASE 7 ++ ++ /* Type Defines: */ ++ /** Type define for a DHCP packet inside an Ethernet frame. */ ++ typedef struct ++ { ++ uint8_t Operation; /**< DHCP operation, either DHCP_OP_BOOTREQUEST or DHCP_OP_BOOTREPLY */ ++ uint8_t HardwareType; /**< Hardware carrier type constant */ ++ uint8_t HardwareAddressLength; /**< Length in bytes of a hardware (MAC) address on the network */ ++ uint8_t Hops; /**< Number of hops required to reach the server, unused */ ++ ++ uint32_t TransactionID; /**< Unique ID of the DHCP packet, for positive matching between sent and received packets */ ++ ++ uint16_t ElapsedSeconds; /**< Elapsed seconds since the request was made */ ++ uint16_t Flags; /**< BOOTP packet flags */ ++ ++ IP_Address_t ClientIP; /**< Client IP address, if already leased an IP */ ++ IP_Address_t YourIP; /**< Client IP address */ ++ IP_Address_t NextServerIP; /**< Legacy BOOTP protocol field, unused for DHCP */ ++ IP_Address_t RelayAgentIP; /**< Legacy BOOTP protocol field, unused for DHCP */ ++ ++ uint8_t ClientHardwareAddress[16]; /**< Hardware (MAC) address of the client making a request to the DHCP server */ ++ uint8_t ServerHostnameString[64]; /**< Legacy BOOTP protocol field, unused for DHCP */ ++ uint8_t BootFileName[128]; /**< Legacy BOOTP protocol field, unused for DHCP */ ++ ++ uint32_t Cookie; /**< Magic BOOTP protocol cookie to indicate a valid packet */ ++ } DHCP_Header_t; ++ ++ /* Function Prototypes: */ ++ int16_t DHCP_ProcessDHCPPacket(void* IPHeaderInStart, ++ void* DHCPHeaderInStart, ++ void* DHCPHeaderOutStart); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/Ethernet.c index 000000000,000000000..a48de2c71 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/Ethernet.c @@@ -1,0 -1,0 +1,136 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * Ethernet frame packet handling routines. This protocol handles the processing of raw Ethernet ++ * frames sent and received, deferring the processing of sub-packet protocols to the appropriate ++ * protocol handlers, such as DHCP or ARP. ++ */ ++ ++#include "Ethernet.h" ++ ++/** Ethernet Frame buffer structure, to hold the incoming Ethernet frame from the host. */ ++Ethernet_Frame_Info_t FrameIN; ++ ++/** Ethernet Frame buffer structure, to hold the outgoing Ethernet frame to the host. */ ++Ethernet_Frame_Info_t FrameOUT; ++ ++/** Constant for convenience when checking against or setting a MAC address to the virtual server MAC address. */ ++const MAC_Address_t ServerMACAddress = {SERVER_MAC_ADDRESS}; ++ ++/** Constant for convenience when checking against or setting an IP address to the virtual server IP address. */ ++const IP_Address_t ServerIPAddress = {SERVER_IP_ADDRESS}; ++ ++/** Constant for convenience when checking against or setting a MAC address to the broadcast MAC address. */ ++const MAC_Address_t BroadcastMACAddress = {BROADCAST_MAC_ADDRESS}; ++ ++/** Constant for convenience when checking against or setting a IP address to the broadcast IP address. */ ++const IP_Address_t BroadcastIPAddress = {BROADCAST_IP_ADDRESS}; ++ ++/** Constant for convenience when checking against or setting an IP address to the client (host) IP address. */ ++const IP_Address_t ClientIPAddress = {CLIENT_IP_ADDRESS}; ++ ++ ++/** Processes an incoming Ethernet frame, and writes the appropriate response to the output Ethernet ++ * frame buffer if the sub protocol handlers create a valid response. ++ */ ++void Ethernet_ProcessPacket(void) ++{ ++ DecodeEthernetFrameHeader(FrameIN.FrameData); ++ ++ /* Cast the incoming Ethernet frame to the Ethernet header type */ ++ Ethernet_Frame_Header_t* FrameINHeader = (Ethernet_Frame_Header_t*)&FrameIN.FrameData; ++ Ethernet_Frame_Header_t* FrameOUTHeader = (Ethernet_Frame_Header_t*)&FrameOUT.FrameData; ++ ++ int16_t RetSize = NO_RESPONSE; ++ ++ /* Ensure frame is addressed to either all (broadcast) or the virtual webserver, and is a type II frame */ ++ if ((MAC_COMPARE(&FrameINHeader->Destination, &ServerMACAddress) || ++ MAC_COMPARE(&FrameINHeader->Destination, &BroadcastMACAddress)) && ++ (SwapEndian_16(FrameIN.FrameLength) > ETHERNET_VER2_MINSIZE)) ++ { ++ /* Process the packet depending on its protocol */ ++ switch (SwapEndian_16(FrameINHeader->EtherType)) ++ { ++ case ETHERTYPE_ARP: ++ RetSize = ARP_ProcessARPPacket(&FrameIN.FrameData[sizeof(Ethernet_Frame_Header_t)], ++ &FrameOUT.FrameData[sizeof(Ethernet_Frame_Header_t)]); ++ break; ++ case ETHERTYPE_IPV4: ++ RetSize = IP_ProcessIPPacket(&FrameIN.FrameData[sizeof(Ethernet_Frame_Header_t)], ++ &FrameOUT.FrameData[sizeof(Ethernet_Frame_Header_t)]); ++ break; ++ } ++ ++ /* Protocol processing routine has filled a response, complete the ethernet frame header */ ++ if (RetSize > 0) ++ { ++ /* Fill out the response Ethernet frame header */ ++ FrameOUTHeader->Source = ServerMACAddress; ++ FrameOUTHeader->Destination = FrameINHeader->Source; ++ FrameOUTHeader->EtherType = FrameINHeader->EtherType; ++ ++ /* Set the response length in the buffer and indicate that a response is ready to be sent */ ++ FrameOUT.FrameLength = (sizeof(Ethernet_Frame_Header_t) + RetSize); ++ } ++ } ++ ++ /* Check if the packet was processed */ ++ if (RetSize != NO_PROCESS) ++ { ++ /* Clear the frame buffer */ ++ FrameIN.FrameLength = 0; ++ } ++} ++ ++/** Calculates the appropriate ethernet checksum, consisting of the addition of the one's ++ * compliment of each word, complimented. ++ * ++ * \param[in] Data Pointer to the packet buffer data whose checksum must be calculated ++ * \param[in] Bytes Number of bytes in the data buffer to process ++ * ++ * \return A 16-bit Ethernet checksum value ++ */ ++uint16_t Ethernet_Checksum16(void* Data, ++ uint16_t Bytes) ++{ ++ uint16_t* Words = (uint16_t*)Data; ++ uint32_t Checksum = 0; ++ ++ for (uint16_t CurrWord = 0; CurrWord < (Bytes >> 1); CurrWord++) ++ Checksum += Words[CurrWord]; ++ ++ while (Checksum & 0xFFFF0000) ++ Checksum = ((Checksum & 0xFFFF) + (Checksum >> 16)); ++ ++ return ~Checksum; ++} ++ diff --cc lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/Ethernet.h index 000000000,000000000..8eaf64080 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/Ethernet.h @@@ -1,0 -1,0 +1,111 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 Ethernet.c. ++ */ ++ ++#ifndef _ETHERNET_H_ ++#define _ETHERNET_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <string.h> ++ ++ #include "Config/AppConfig.h" ++ ++ #include "EthernetProtocols.h" ++ #include "ProtocolDecoders.h" ++ #include "ICMP.h" ++ #include "TCP.h" ++ #include "UDP.h" ++ #include "DHCP.h" ++ #include "ARP.h" ++ #include "IP.h" ++ ++ /* Macros: */ ++ /** Physical MAC address of the network broadcast address. */ ++ #define BROADCAST_MAC_ADDRESS {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF} ++ ++ /** Performs a comparison between two MAC addresses, indicating if they are identical. ++ * ++ * \param[in] MAC1 First MAC address ++ * \param[in] MAC2 Second MAC address ++ * ++ * \return True if the addresses match, \c false otherwise ++ */ ++ #define MAC_COMPARE(MAC1, MAC2) (memcmp(MAC1, MAC2, sizeof(MAC_Address_t)) == 0) ++ ++ /** Maximum size of an incoming or outgoing Ethernet frame in bytes. */ ++ #define ETHERNET_FRAME_SIZE_MAX 1500 ++ ++ /** Minimum size of an Ethernet packet in bytes, to conform to the Ethernet V2 packet standard. */ ++ #define ETHERNET_VER2_MINSIZE 0x0600 ++ ++ /** Return value for all sub protocol handling routines, indicating that no response packet has been generated. */ ++ #define NO_RESPONSE 0 ++ ++ /** Return value for all sub protocol handling routines, indicating that the packet has not yet been handled. */ ++ #define NO_PROCESS -1 ++ ++ /* Type Defines: */ ++ /** Type define for an Ethernet frame buffer data and information structure. */ ++ typedef struct ++ { ++ uint8_t FrameData[ETHERNET_FRAME_SIZE_MAX]; /**< Ethernet frame contents. */ ++ uint16_t FrameLength; /**< Length in bytes of the Ethernet frame stored in the buffer. */ ++ } Ethernet_Frame_Info_t; ++ ++ /** Type define for an Ethernet frame header. */ ++ typedef struct ++ { ++ MAC_Address_t Destination; /**< Physical MAC address of the packet recipient */ ++ MAC_Address_t Source; /**< Physics MAC address of the packet source */ ++ uint16_t EtherType; /**< Ethernet packet sub-protocol type, for Ethernet V2 packets */ ++ } Ethernet_Frame_Header_t; ++ ++ /* External Variables: */ ++ extern Ethernet_Frame_Info_t FrameIN; ++ extern Ethernet_Frame_Info_t FrameOUT; ++ ++ extern const MAC_Address_t ServerMACAddress; ++ extern const IP_Address_t ServerIPAddress; ++ extern const MAC_Address_t BroadcastMACAddress; ++ extern const IP_Address_t BroadcastIPAddress; ++ extern const IP_Address_t ClientIPAddress; ++ ++ /* Function Prototypes: */ ++ void Ethernet_ProcessPacket(void); ++ uint16_t Ethernet_Checksum16(void* Data, ++ uint16_t Bytes); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/EthernetProtocols.h index 000000000,000000000..ca738cd0d new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/EthernetProtocols.h @@@ -1,0 -1,0 +1,88 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * General Ethernet protocol constants and type defines, for use by ++ * all network protocol portions of the TCP/IP stack. ++ */ ++ ++#ifndef _ETHERNET_PROTOCOLS_H_ ++#define _ETHERNET_PROTOCOLS_H_ ++ ++ /* Macros: */ ++ #define ETHERTYPE_IPV4 0x0800 ++ #define ETHERTYPE_ARP 0x0806 ++ #define ETHERTYPE_RARP 0x8035 ++ #define ETHERTYPE_APPLETALK 0x809b ++ #define ETHERTYPE_APPLETALKARP 0x80f3 ++ #define ETHERTYPE_IEEE8021Q 0x8100 ++ #define ETHERTYPE_NOVELLIPX 0x8137 ++ #define ETHERTYPE_NOVELL 0x8138 ++ #define ETHERTYPE_IPV6 0x86DD ++ #define ETHERTYPE_COBRANET 0x8819 ++ #define ETHERTYPE_PROVIDERBRIDGING 0x88a8 ++ #define ETHERTYPE_MPLSUNICAST 0x8847 ++ #define ETHERTYPE_MPLSMULTICAST 0x8848 ++ #define ETHERTYPE_PPPoEDISCOVERY 0x8863 ++ #define ETHERTYPE_PPPoESESSION 0x8864 ++ #define ETHERTYPE_EAPOVERLAN 0x888E ++ #define ETHERTYPE_HYPERSCSI 0x889A ++ #define ETHERTYPE_ATAOVERETHERNET 0x88A2 ++ #define ETHERTYPE_ETHERCAT 0x88A4 ++ #define ETHERTYPE_SERCOSIII 0x88CD ++ #define ETHERTYPE_CESoE 0x88D8 ++ #define ETHERTYPE_MACSECURITY 0x88E5 ++ #define ETHERTYPE_FIBRECHANNEL 0x8906 ++ #define ETHERTYPE_QINQ 0x9100 ++ #define ETHERTYPE_VLLT 0xCAFE ++ ++ #define PROTOCOL_ICMP 1 ++ #define PROTOCOL_IGMP 2 ++ #define PROTOCOL_TCP 6 ++ #define PROTOCOL_UDP 17 ++ #define PROTOCOL_OSPF 89 ++ #define PROTOCOL_SCTP 132 ++ ++ /* Type Defines: */ ++ /** Type define for a physical MAC address of a device on a network. */ ++ typedef struct ++ { ++ uint8_t Octets[6]; /**< Individual bytes of a MAC address */ ++ } RNDIS_MAC_Address_t; ++ ++ /** Type define for a protocol IP address of a device on a network. */ ++ typedef struct ++ { ++ uint8_t Octets[4]; /**< Individual bytes of an IP address */ ++ } IP_Address_t; ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/ICMP.c index 000000000,000000000..b144c4c51 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/ICMP.c @@@ -1,0 -1,0 +1,81 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * Internet Control Message Protocol (ICMP) packet handling routines. This protocol handles ++ * Echo requests from the host, to indicate a successful network connection between the host ++ * and the virtual server. ++ */ ++ ++#include "ICMP.h" ++ ++/** Processes an ICMP packet inside an Ethernet frame, and writes the appropriate response ++ * to the output Ethernet frame if the host is issuing a ICMP ECHO request. ++ * ++ * \param[in] InDataStart Pointer to the start of the incoming packet's ICMP header ++ * \param[out] OutDataStart Pointer to the start of the outgoing packet's ICMP header ++ * ++ * \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise ++ */ ++int16_t ICMP_ProcessICMPPacket(void* InDataStart, ++ void* OutDataStart) ++{ ++ ICMP_Header_t* ICMPHeaderIN = (ICMP_Header_t*)InDataStart; ++ ICMP_Header_t* ICMPHeaderOUT = (ICMP_Header_t*)OutDataStart; ++ ++ DecodeICMPHeader(InDataStart); ++ ++ /* Determine if the ICMP packet is an echo request (ping) */ ++ if (ICMPHeaderIN->Type == ICMP_TYPE_ECHOREQUEST) ++ { ++ /* Fill out the ICMP response packet */ ++ ICMPHeaderOUT->Type = ICMP_TYPE_ECHOREPLY; ++ ICMPHeaderOUT->Code = 0; ++ ICMPHeaderOUT->Checksum = 0; ++ ICMPHeaderOUT->Id = ICMPHeaderIN->Id; ++ ICMPHeaderOUT->Sequence = ICMPHeaderIN->Sequence; ++ ++ intptr_t DataSize = FrameIN.FrameLength - ((((intptr_t)InDataStart + sizeof(ICMP_Header_t)) - (intptr_t)FrameIN.FrameData)); ++ ++ /* Copy the remaining payload to the response - echo requests should echo back any sent data */ ++ memmove(&((uint8_t*)OutDataStart)[sizeof(ICMP_Header_t)], ++ &((uint8_t*)InDataStart)[sizeof(ICMP_Header_t)], ++ DataSize); ++ ++ ICMPHeaderOUT->Checksum = Ethernet_Checksum16(ICMPHeaderOUT, (DataSize + sizeof(ICMP_Header_t))); ++ ++ /* Return the size of the response so far */ ++ return (DataSize + sizeof(ICMP_Header_t)); ++ } ++ ++ return NO_RESPONSE; ++} ++ diff --cc lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/ICMP.h index 000000000,000000000..e8039da3e new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/ICMP.h @@@ -1,0 -1,0 +1,82 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ICMP.c. ++ */ ++ ++#ifndef _ICMP_H_ ++#define _ICMP_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <string.h> ++ ++ #include "EthernetProtocols.h" ++ #include "Ethernet.h" ++ #include "ProtocolDecoders.h" ++ ++ /* Macros: */ ++ /** ICMP message type constant, indicating an ICMP ECHO Reply message. */ ++ #define ICMP_TYPE_ECHOREPLY 0 ++ ++ /** ICMP message type constant, indicating a packet destination is unreachable. */ ++ #define ICMP_TYPE_DESTINATIONUNREACHABLE 3 ++ ++ /** ICMP message type constant, indicating an ICMP Source Quench message. */ ++ #define ICMP_TYPE_SOURCEQUENCH 4 ++ ++ /** ICMP message type constant, indicating an ICMP Redirect message. */ ++ #define ICMP_TYPE_REDIRECTMESSAGE 5 ++ ++ /** ICMP message type constant, indicating an ICMP ECHO Request message. */ ++ #define ICMP_TYPE_ECHOREQUEST 8 ++ ++ /** ICMP message type constant, indicating an ICMP Time Exceeded message. */ ++ #define ICMP_TYPE_TIMEEXCEEDED 11 ++ ++ /* Type Defines: */ ++ /** Type define for an ICMP message header. */ ++ typedef struct ++ { ++ uint8_t Type; /**< ICMP message type, an \c ICMP_TYPE_* constant */ ++ uint8_t Code; /**< ICMP message code, indicating the message value */ ++ uint16_t Checksum; /**< Ethernet checksum of the ICMP message */ ++ uint16_t Id; /**< Id of the ICMP message */ ++ uint16_t Sequence; /**< Sequence number of the ICMP message, to link together message responses */ ++ } ICMP_Header_t; ++ ++ /* Function Prototypes: */ ++ int16_t ICMP_ProcessICMPPacket(void* InDataStart, ++ void* OutDataStart); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/IP.c index 000000000,000000000..dfa583b85 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/IP.c @@@ -1,0 -1,0 +1,113 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * Internet Protocol (IP) packet handling routines. This protocol handles IP packets from the ++ * host which typically encapsulate other protocols such as ICMP, UDP and TCP. ++ */ ++ ++#include "IP.h" ++ ++/** Processes an IP packet inside an Ethernet frame, and writes the appropriate response ++ * to the output Ethernet frame if one is created by a sub-protocol handler. ++ * ++ * \param[in] InDataStart Pointer to the start of the incoming packet's IP header ++ * \param[out] OutDataStart Pointer to the start of the outgoing packet's IP header ++ * ++ * \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE if no ++ * response was generated, NO_PROCESS if the packet processing was deferred until the ++ * next Ethernet packet handler iteration ++ */ ++int16_t IP_ProcessIPPacket(void* InDataStart, ++ void* OutDataStart) ++{ ++ DecodeIPHeader(InDataStart); ++ ++ IP_Header_t* IPHeaderIN = (IP_Header_t*)InDataStart; ++ IP_Header_t* IPHeaderOUT = (IP_Header_t*)OutDataStart; ++ ++ /* Header length is specified in number of longs in the packet header, convert to bytes */ ++ uint16_t HeaderLengthBytes = (IPHeaderIN->HeaderLength * sizeof(uint32_t)); ++ ++ int16_t RetSize = NO_RESPONSE; ++ ++ /* Check to ensure the IP packet is addressed to the virtual webserver's IP or the broadcast IP address */ ++ if (!(IP_COMPARE(&IPHeaderIN->DestinationAddress, &ServerIPAddress)) && ++ !(IP_COMPARE(&IPHeaderIN->DestinationAddress, &BroadcastIPAddress))) ++ { ++ return NO_RESPONSE; ++ } ++ ++ /* Pass off the IP payload to the appropriate protocol processing routine */ ++ switch (IPHeaderIN->Protocol) ++ { ++ case PROTOCOL_ICMP: ++ RetSize = ICMP_ProcessICMPPacket(&((uint8_t*)InDataStart)[HeaderLengthBytes], ++ &((uint8_t*)OutDataStart)[sizeof(IP_Header_t)]); ++ break; ++ case PROTOCOL_TCP: ++ RetSize = TCP_ProcessTCPPacket(InDataStart, ++ &((uint8_t*)InDataStart)[HeaderLengthBytes], ++ &((uint8_t*)OutDataStart)[sizeof(IP_Header_t)]); ++ break; ++ case PROTOCOL_UDP: ++ RetSize = UDP_ProcessUDPPacket(InDataStart, ++ &((uint8_t*)InDataStart)[HeaderLengthBytes], ++ &((uint8_t*)OutDataStart)[sizeof(IP_Header_t)]); ++ break; ++ } ++ ++ /* Check to see if the protocol processing routine has filled out a response */ ++ if (RetSize > 0) ++ { ++ /* Fill out the response IP packet header */ ++ IPHeaderOUT->TotalLength = SwapEndian_16(sizeof(IP_Header_t) + RetSize); ++ IPHeaderOUT->TypeOfService = 0; ++ IPHeaderOUT->HeaderLength = (sizeof(IP_Header_t) / sizeof(uint32_t)); ++ IPHeaderOUT->Version = 4; ++ IPHeaderOUT->Flags = 0; ++ IPHeaderOUT->FragmentOffset = 0; ++ IPHeaderOUT->Identification = 0; ++ IPHeaderOUT->HeaderChecksum = 0; ++ IPHeaderOUT->Protocol = IPHeaderIN->Protocol; ++ IPHeaderOUT->TTL = DEFAULT_TTL; ++ IPHeaderOUT->SourceAddress = IPHeaderIN->DestinationAddress; ++ IPHeaderOUT->DestinationAddress = IPHeaderIN->SourceAddress; ++ ++ IPHeaderOUT->HeaderChecksum = Ethernet_Checksum16(IPHeaderOUT, sizeof(IP_Header_t)); ++ ++ /* Return the size of the response so far */ ++ return (sizeof(IP_Header_t) + RetSize); ++ } ++ ++ return RetSize; ++} ++ diff --cc lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/IP.h index 000000000,000000000..48f2c9086 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/IP.h @@@ -1,0 -1,0 +1,92 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 IP.c. ++ */ ++ ++#ifndef _IP_H_ ++#define _IP_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <string.h> ++ ++ #include "EthernetProtocols.h" ++ #include "Ethernet.h" ++ #include "ProtocolDecoders.h" ++ #include "Config/AppConfig.h" ++ ++ /* Macros: */ ++ /** Protocol IP address of the broadcast address. */ ++ #define BROADCAST_IP_ADDRESS {0xFF, 0xFF, 0xFF, 0xFF} ++ ++ /** Default Time To Live (TTL) value for sent packets, indicating the maximum allowable hops until their destination ++ * is reached. ++ */ ++ #define DEFAULT_TTL 128 ++ ++ /** Performs a comparison between two IP addresses, indicating if they are identical. ++ * ++ * \param[in] IP1 First IP address ++ * \param[in] IP2 Second IP address ++ * ++ * \return True if the addresses match, \c false otherwise ++ */ ++ #define IP_COMPARE(IP1, IP2) (memcmp(IP1, IP2, sizeof(IP_Address_t)) == 0) ++ ++ /* Type Defines: */ ++ /** Type define of an IP packet header. */ ++ typedef struct ++ { ++ unsigned HeaderLength : 4; /**< Total length of the packet header, in 4-byte blocks */ ++ unsigned Version : 4; /**< IP protocol version */ ++ uint8_t TypeOfService; /**< Special service type identifier, indicating delay/throughput/reliability levels */ ++ uint16_t TotalLength; /**< Total length of the IP packet, in bytes */ ++ ++ uint16_t Identification; /**< Identification value for identifying fragmented packets */ ++ unsigned FragmentOffset : 13; /**< Offset of this IP fragment */ ++ unsigned Flags : 3; /**< Fragment flags, to indicate if a packet is fragmented */ ++ ++ uint8_t TTL; /**< Maximum allowable number of hops to reach the packet destination */ ++ uint8_t Protocol; /**< Encapsulated protocol type */ ++ uint16_t HeaderChecksum; /**< Ethernet checksum of the IP header */ ++ ++ IP_Address_t SourceAddress; /**< Source protocol IP address of the packet */ ++ IP_Address_t DestinationAddress; /**< Destination protocol IP address of the packet */ ++ } IP_Header_t; ++ ++ /* Function Prototypes: */ ++ int16_t IP_ProcessIPPacket(void* InDataStart, ++ void* OutDataStart); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/ProtocolDecoders.c index 000000000,000000000..90d678bf4 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/ProtocolDecoders.c @@@ -1,0 -1,0 +1,276 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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. ++*/ ++ ++/* Protocol decoders for Ethernet, TCP, IP, ICMP and ARP. Each of these routines ++ accepts a header to the appropriate protocol and prints out pertinent information ++ on the packet through the serial port. ++ ++ To disable printing of a specific protocol, define the token NO_DECODE_{Protocol} ++ in the project makefile, and pass it to the compiler using the -D switch. ++*/ ++ ++/** \file ++ * ++ * Protocol decoding routines, for the plain-text decoding of Ethernet frames for debugging purposes. ++ * Enabled protocol decoders will print incoming Ethernet frame contents through the USART in a human ++ * readable format. ++ * ++ * Note that the USART is a slow transmission medium, and will slow down packet processing considerably. ++ * Packet decoding routines can be disabled by defining NO_DECODE_{Protocol Name} in the project makefile ++ * and passing it to the compiler via the -D switch. ++ */ ++ ++#include "ProtocolDecoders.h" ++ ++/** Decodes an Ethernet frame header and prints its contents to through the USART in a human readable format. ++ * ++ * \param[in] InDataStart Pointer to the start of an Ethernet frame header ++ */ ++void DecodeEthernetFrameHeader(void* InDataStart) ++{ ++ #if !defined(NO_DECODE_ETHERNET) ++ Ethernet_Frame_Header_t* FrameHeader = (Ethernet_Frame_Header_t*)InDataStart; ++ ++ printf_P(PSTR("\r\n")); ++ ++ printf_P(PSTR(" ETHERNET\r\n")); ++ ++ if (!(MAC_COMPARE(&FrameHeader->Destination, &ServerMACAddress)) && ++ !(MAC_COMPARE(&FrameHeader->Destination, &BroadcastMACAddress))) ++ { ++ printf_P(PSTR(" + NOT ADDRESSED TO DEVICE\r\n")); ++ return; ++ } ++ ++ printf_P(PSTR(" + MAC Source : %02X:%02X:%02X:%02X:%02X:%02X\r\n"), FrameHeader->Source.Octets[0], ++ FrameHeader->Source.Octets[1], ++ FrameHeader->Source.Octets[2], ++ FrameHeader->Source.Octets[3], ++ FrameHeader->Source.Octets[4], ++ FrameHeader->Source.Octets[5]); ++ ++ printf_P(PSTR(" + MAC Dest: %02X:%02X:%02X:%02X:%02X:%02X\r\n"), FrameHeader->Destination.Octets[0], ++ FrameHeader->Destination.Octets[1], ++ FrameHeader->Destination.Octets[2], ++ FrameHeader->Destination.Octets[3], ++ FrameHeader->Destination.Octets[4], ++ FrameHeader->Destination.Octets[5]); ++ ++ printf_P(PSTR(" + Protocol: 0x%04x\r\n"), SwapEndian_16(FrameHeader->EtherType)); ++ #endif ++} ++ ++/** Decodes an ARP header and prints its contents to through the USART in a human readable format. ++ * ++ * \param[in] InDataStart Pointer to the start of an ARP packet header ++ */ ++void DecodeARPHeader(void* InDataStart) ++{ ++ #if !defined(NO_DECODE_ARP) ++ ARP_Header_t* ARPHeader = (ARP_Header_t*)InDataStart; ++ ++ printf_P(PSTR(" \\\r\n ARP\r\n")); ++ ++ if (!(IP_COMPARE(&ARPHeader->TPA, &ServerIPAddress)) && ++ !(MAC_COMPARE(&ARPHeader->THA, &ServerMACAddress))) ++ { ++ printf_P(PSTR(" + NOT ADDRESSED TO DEVICE\r\n")); ++ return; ++ } ++ ++ printf_P(PSTR(" + Protocol: %x\r\n"), SwapEndian_16(ARPHeader->ProtocolType)); ++ printf_P(PSTR(" + Operation: %u\r\n"), SwapEndian_16(ARPHeader->Operation)); ++ ++ if (SwapEndian_16(ARPHeader->ProtocolType) == ETHERTYPE_IPV4) ++ { ++ printf_P(PSTR(" + SHA MAC: %02X:%02X:%02X:%02X:%02X:%02X\r\n"), ARPHeader->SHA.Octets[0], ++ ARPHeader->SHA.Octets[1], ++ ARPHeader->SHA.Octets[2], ++ ARPHeader->SHA.Octets[3], ++ ARPHeader->SHA.Octets[4], ++ ARPHeader->SHA.Octets[5]); ++ ++ printf_P(PSTR(" + SPA IP: %u.%u.%u.%u\r\n"), ARPHeader->SPA.Octets[0], ++ ARPHeader->SPA.Octets[1], ++ ARPHeader->SPA.Octets[2], ++ ARPHeader->SPA.Octets[3]); ++ ++ printf_P(PSTR(" + THA MAC: %02X:%02X:%02X:%02X:%02X:%02X\r\n"), ARPHeader->THA.Octets[0], ++ ARPHeader->THA.Octets[1], ++ ARPHeader->THA.Octets[2], ++ ARPHeader->THA.Octets[3], ++ ARPHeader->THA.Octets[4], ++ ARPHeader->THA.Octets[5]); ++ ++ printf_P(PSTR(" + TPA IP: %u.%u.%u.%u\r\n"), ARPHeader->TPA.Octets[0], ++ ARPHeader->TPA.Octets[1], ++ ARPHeader->TPA.Octets[2], ++ ARPHeader->TPA.Octets[3]); ++ } ++ #endif ++} ++ ++/** Decodes an IP header and prints its contents to through the USART in a human readable format. ++ * ++ * \param[in] InDataStart Pointer to the start of an IP packet header ++ */ ++void DecodeIPHeader(void* InDataStart) ++{ ++ #if !defined(NO_DECODE_IP) ++ IP_Header_t* IPHeader = (IP_Header_t*)InDataStart; ++ ++ uint16_t HeaderLengthBytes = (IPHeader->HeaderLength * sizeof(uint32_t)); ++ ++ printf_P(PSTR(" \\\r\n IP\r\n")); ++ ++ if (!(IP_COMPARE(&IPHeader->DestinationAddress, &ServerIPAddress))) ++ { ++ printf_P(PSTR(" + NOT ADDRESSED TO DEVICE\r\n")); ++ return; ++ } ++ ++ printf_P(PSTR(" + Header Length: %u Bytes\r\n"), HeaderLengthBytes); ++ printf_P(PSTR(" + Packet Version: %u\r\n"), IPHeader->Version); ++ printf_P(PSTR(" + Total Length: %u\r\n"), SwapEndian_16(IPHeader->TotalLength)); ++ ++ printf_P(PSTR(" + Protocol: %u\r\n"), IPHeader->Protocol); ++ printf_P(PSTR(" + TTL: %u\r\n"), IPHeader->TTL); ++ ++ printf_P(PSTR(" + IP Src: %u.%u.%u.%u\r\n"), IPHeader->SourceAddress.Octets[0], ++ IPHeader->SourceAddress.Octets[1], ++ IPHeader->SourceAddress.Octets[2], ++ IPHeader->SourceAddress.Octets[3]); ++ ++ printf_P(PSTR(" + IP Dst: %u.%u.%u.%u\r\n"), IPHeader->DestinationAddress.Octets[0], ++ IPHeader->DestinationAddress.Octets[1], ++ IPHeader->DestinationAddress.Octets[2], ++ IPHeader->DestinationAddress.Octets[3]); ++ #endif ++} ++ ++/** Decodes an ICMP header and prints its contents to through the USART in a human readable format. ++ * ++ * \param[in] InDataStart Pointer to the start of an ICMP packet header ++ */ ++void DecodeICMPHeader(void* InDataStart) ++{ ++ #if !defined(NO_DECODE_ICMP) ++ ICMP_Header_t* ICMPHeader = (ICMP_Header_t*)InDataStart; ++ ++ printf_P(PSTR(" \\\r\n ICMP\r\n")); ++ ++ printf_P(PSTR(" + Type: %u\r\n"), ICMPHeader->Type); ++ printf_P(PSTR(" + Code: %u\r\n"), ICMPHeader->Code); ++ #endif ++} ++ ++/** Decodes a TCP header and prints its contents to through the USART in a human readable format. ++ * ++ * \param[in] InDataStart Pointer to the start of a TCP packet header ++ */ ++void DecodeTCPHeader(void* InDataStart) ++{ ++ #if !defined(NO_DECODE_TCP) ++ TCP_Header_t* TCPHeader = (TCP_Header_t*)InDataStart; ++ ++ uint16_t HeaderLengthBytes = (TCPHeader->DataOffset * sizeof(uint32_t)); ++ ++ printf_P(PSTR(" \\\r\n TCP\r\n")); ++ ++ printf_P(PSTR(" + Header Length: %u Bytes\r\n"), HeaderLengthBytes); ++ ++ printf_P(PSTR(" + Source Port: %u\r\n"), SwapEndian_16(TCPHeader->SourcePort)); ++ printf_P(PSTR(" + Destination Port: %u\r\n"), SwapEndian_16(TCPHeader->DestinationPort)); ++ ++ printf_P(PSTR(" + Sequence Number: %lu\r\n"), SwapEndian_32(TCPHeader->SequenceNumber)); ++ printf_P(PSTR(" + Acknowledgment Number: %lu\r\n"), SwapEndian_32(TCPHeader->AcknowledgmentNumber)); ++ ++ printf_P(PSTR(" + Flags: 0x%02X\r\n"), TCPHeader->Flags); ++ ++ if (TCP_GetPortState(TCPHeader->DestinationPort) == TCP_Port_Closed) ++ printf_P(PSTR(" + NOT LISTENING ON DESTINATION PORT\r\n")); ++ #endif ++} ++ ++/** Decodes an UDP header and prints its contents to through the USART in a human readable format. ++ * ++ * \param[in] InDataStart Pointer to the start of a UDP packet header ++ */ ++void DecodeUDPHeader(void* InDataStart) ++{ ++ #if !defined(NO_DECODE_UDP) ++ UDP_Header_t* UDPHeader = (UDP_Header_t*)InDataStart; ++ ++ printf_P(PSTR(" \\\r\n UDP\r\n")); ++ ++ printf_P(PSTR(" + Source Port: %u\r\n"), SwapEndian_16(UDPHeader->SourcePort)); ++ printf_P(PSTR(" + Destination Port: %u\r\n"), SwapEndian_16(UDPHeader->DestinationPort)); ++ ++ printf_P(PSTR(" + Data Length: %d\r\n"), SwapEndian_16(UDPHeader->Length)); ++ #endif ++} ++ ++/** Decodes an DHCP header and prints its contents to through the USART in a human readable format. ++ * ++ * \param[in] InDataStart Pointer to the start of a DHCP packet header ++ */ ++void DecodeDHCPHeader(void* InDataStart) ++{ ++ #if !defined(NO_DECODE_DHCP) ++ uint8_t* DHCPOptions = ((uint8_t*)InDataStart + sizeof(DHCP_Header_t)); ++ ++ printf_P(PSTR(" \\\r\n DHCP\r\n")); ++ ++ while (DHCPOptions[0] != DHCP_OPTION_END) ++ { ++ if (DHCPOptions[0] == DHCP_OPTION_MESSAGETYPE) ++ { ++ switch (DHCPOptions[2]) ++ { ++ case DHCP_MESSAGETYPE_DISCOVER: ++ printf_P(PSTR(" + DISCOVER\r\n")); ++ break; ++ case DHCP_MESSAGETYPE_REQUEST: ++ printf_P(PSTR(" + REQUEST\r\n")); ++ break; ++ case DHCP_MESSAGETYPE_RELEASE: ++ printf_P(PSTR(" + RELEASE\r\n")); ++ break; ++ case DHCP_MESSAGETYPE_DECLINE: ++ printf_P(PSTR(" + DECLINE\r\n")); ++ break; ++ } ++ } ++ ++ DHCPOptions += ((DHCPOptions[0] == DHCP_OPTION_PAD) ? 1 : (DHCPOptions[1] + 2)); ++ } ++ #endif ++} ++ diff --cc lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/ProtocolDecoders.h index 000000000,000000000..77a50f02f new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/ProtocolDecoders.h @@@ -1,0 -1,0 +1,60 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ProtocolDecoders.c. ++ */ ++ ++#ifndef _PROTOCOL_DECODERS_H_ ++#define _PROTOCOL_DECODERS_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/pgmspace.h> ++ #include <stdio.h> ++ ++ #include <LUFA/Drivers/Peripheral/Serial.h> ++ ++ #include "EthernetProtocols.h" ++ #include "Ethernet.h" ++ #include "Config/AppConfig.h" ++ ++ /* Function Prototypes: */ ++ void DecodeEthernetFrameHeader(void* InDataStart); ++ void DecodeARPHeader(void* InDataStart); ++ void DecodeIPHeader(void* InDataStart); ++ void DecodeICMPHeader(void* InDataStart); ++ void DecodeTCPHeader(void* InDataStart); ++ void DecodeUDPHeader(void* InDataStart); ++ void DecodeDHCPHeader(void* InDataStart); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/RNDIS.c index 000000000,000000000..00052ed39 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/RNDIS.c @@@ -1,0 -1,0 +1,394 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * RNDIS command handler functions. This handles RNDIS commands according to ++ * the Microsoft RNDIS specification, creating a USB Ethernet network adapter. ++ */ ++ ++#define INCLUDE_FROM_RNDIS_C ++#include "RNDIS.h" ++ ++/** Physical MAC address of the network adapter, which becomes the MAC address of the host for packets sent to the adapter. */ ++static const MAC_Address_t PROGMEM AdapterMACAddress = {ADAPTER_MAC_ADDRESS}; ++ ++/** Vendor description of the adapter. This is overridden by the INF file required to install the appropriate RNDIS drivers for ++ * the device, but may still be used by the OS in some circumstances. ++ */ ++static const char PROGMEM AdapterVendorDescription[] = "LUFA RNDIS Adapter"; ++ ++/** List of RNDIS OID commands supported by this adapter. */ ++static const uint32_t PROGMEM AdapterSupportedOIDList[] = ++ { ++ OID_GEN_SUPPORTED_LIST, ++ OID_GEN_PHYSICAL_MEDIUM, ++ OID_GEN_HARDWARE_STATUS, ++ OID_GEN_MEDIA_SUPPORTED, ++ OID_GEN_MEDIA_IN_USE, ++ OID_GEN_MAXIMUM_FRAME_SIZE, ++ OID_GEN_MAXIMUM_TOTAL_SIZE, ++ OID_GEN_LINK_SPEED, ++ OID_GEN_TRANSMIT_BLOCK_SIZE, ++ OID_GEN_RECEIVE_BLOCK_SIZE, ++ OID_GEN_VENDOR_ID, ++ OID_GEN_VENDOR_DESCRIPTION, ++ OID_GEN_CURRENT_PACKET_FILTER, ++ OID_GEN_MAXIMUM_TOTAL_SIZE, ++ OID_GEN_MEDIA_CONNECT_STATUS, ++ OID_GEN_XMIT_OK, ++ OID_GEN_RCV_OK, ++ OID_GEN_XMIT_ERROR, ++ OID_GEN_RCV_ERROR, ++ OID_GEN_RCV_NO_BUFFER, ++ OID_802_3_PERMANENT_ADDRESS, ++ OID_802_3_CURRENT_ADDRESS, ++ OID_802_3_MULTICAST_LIST, ++ OID_802_3_MAXIMUM_LIST_SIZE, ++ OID_802_3_RCV_ERROR_ALIGNMENT, ++ OID_802_3_XMIT_ONE_COLLISION, ++ OID_802_3_XMIT_MORE_COLLISIONS, ++ }; ++ ++/** Buffer for RNDIS messages (as distinct from Ethernet frames sent through the adapter. This must be big enough to hold the entire ++ * Supported OID list, plus the response header. The buffer is half-duplex, and is written to as it is read to save on SRAM - for this ++ * reason, care must be taken when constructing RNDIS responses that unread data is not overwritten when writing in responses. ++ */ ++uint8_t RNDISMessageBuffer[sizeof(AdapterSupportedOIDList) + sizeof(RNDIS_Query_Complete_t)]; ++ ++/** Pointer to the RNDIS message header at the top of the RNDIS message buffer, for convenience. */ ++RNDIS_Message_Header_t* MessageHeader = (RNDIS_Message_Header_t*)&RNDISMessageBuffer; ++ ++/** Indicates if a RNDIS message response is ready to be sent back to the host. */ ++bool ResponseReady = false; ++ ++/** Current RNDIS adapter state, a value from the \c RNDIS_States_t enum. */ ++uint8_t CurrRNDISState = RNDIS_Uninitialized; ++ ++/** Current Ethernet packet filter mask. This is non-zero when the adapter is initialized, or zero when disabled. */ ++uint32_t CurrPacketFilter = 0; ++ ++ ++/** Processes the RNDIS message received by the host and stored in the RNDISMessageBuffer global buffer. If a response is ++ * created, the ResponseReady global is updated so that the response is written back to the host upon request. ++ */ ++void ProcessRNDISControlMessage(void) ++{ ++ /* Note: Only a single buffer is used for both the received message and its response to save SRAM. Because of ++ this, response bytes should be filled in order so that they do not clobber unread data in the buffer. */ ++ ++ switch (MessageHeader->MessageType) ++ { ++ case REMOTE_NDIS_INITIALIZE_MSG: ++ /* Initialize the adapter - return information about the supported RNDIS version and buffer sizes */ ++ ++ ResponseReady = true; ++ ++ RNDIS_Initialize_Message_t* INITIALIZE_Message = (RNDIS_Initialize_Message_t*)&RNDISMessageBuffer; ++ RNDIS_Initialize_Complete_t* INITIALIZE_Response = (RNDIS_Initialize_Complete_t*)&RNDISMessageBuffer; ++ ++ INITIALIZE_Response->MessageType = REMOTE_NDIS_INITIALIZE_CMPLT; ++ INITIALIZE_Response->MessageLength = sizeof(RNDIS_Initialize_Complete_t); ++ INITIALIZE_Response->RequestId = INITIALIZE_Message->RequestId; ++ INITIALIZE_Response->Status = REMOTE_NDIS_STATUS_SUCCESS; ++ ++ INITIALIZE_Response->MajorVersion = REMOTE_NDIS_VERSION_MAJOR; ++ INITIALIZE_Response->MinorVersion = REMOTE_NDIS_VERSION_MINOR; ++ INITIALIZE_Response->DeviceFlags = REMOTE_NDIS_DF_CONNECTIONLESS; ++ INITIALIZE_Response->Medium = REMOTE_NDIS_MEDIUM_802_3; ++ INITIALIZE_Response->MaxPacketsPerTransfer = 1; ++ INITIALIZE_Response->MaxTransferSize = (sizeof(RNDIS_Packet_Message_t) + ETHERNET_FRAME_SIZE_MAX); ++ INITIALIZE_Response->PacketAlignmentFactor = 0; ++ INITIALIZE_Response->AFListOffset = 0; ++ INITIALIZE_Response->AFListSize = 0; ++ ++ CurrRNDISState = RNDIS_Initialized; ++ ++ break; ++ case REMOTE_NDIS_HALT_MSG: ++ /* Halt the adapter, reset the adapter state - note that no response should be returned when completed */ ++ ++ ResponseReady = false; ++ MessageHeader->MessageLength = 0; ++ ++ CurrRNDISState = RNDIS_Uninitialized; ++ ++ break; ++ case REMOTE_NDIS_QUERY_MSG: ++ /* Request for information about a parameter about the adapter, specified as an OID token */ ++ ++ ResponseReady = true; ++ ++ RNDIS_Query_Message_t* QUERY_Message = (RNDIS_Query_Message_t*)&RNDISMessageBuffer; ++ RNDIS_Query_Complete_t* QUERY_Response = (RNDIS_Query_Complete_t*)&RNDISMessageBuffer; ++ uint32_t Query_Oid = QUERY_Message->Oid; ++ ++ void* QueryData = &RNDISMessageBuffer[sizeof(RNDIS_Message_Header_t) + ++ QUERY_Message->InformationBufferOffset]; ++ void* ResponseData = &RNDISMessageBuffer[sizeof(RNDIS_Query_Complete_t)]; ++ uint16_t ResponseSize; ++ ++ QUERY_Response->MessageType = REMOTE_NDIS_QUERY_CMPLT; ++ QUERY_Response->MessageLength = sizeof(RNDIS_Query_Complete_t); ++ ++ if (ProcessNDISQuery(Query_Oid, QueryData, QUERY_Message->InformationBufferLength, ++ ResponseData, &ResponseSize)) ++ { ++ QUERY_Response->Status = REMOTE_NDIS_STATUS_SUCCESS; ++ QUERY_Response->MessageLength += ResponseSize; ++ ++ QUERY_Response->InformationBufferLength = ResponseSize; ++ QUERY_Response->InformationBufferOffset = (sizeof(RNDIS_Query_Complete_t) - sizeof(RNDIS_Message_Header_t)); ++ } ++ else ++ { ++ QUERY_Response->Status = REMOTE_NDIS_STATUS_NOT_SUPPORTED; ++ ++ QUERY_Response->InformationBufferLength = 0; ++ QUERY_Response->InformationBufferOffset = 0; ++ } ++ ++ break; ++ case REMOTE_NDIS_SET_MSG: ++ /* Request to set a parameter of the adapter, specified as an OID token */ ++ ++ ResponseReady = true; ++ ++ RNDIS_Set_Message_t* SET_Message = (RNDIS_Set_Message_t*)&RNDISMessageBuffer; ++ RNDIS_Set_Complete_t* SET_Response = (RNDIS_Set_Complete_t*)&RNDISMessageBuffer; ++ uint32_t SET_Oid = SET_Message->Oid; ++ ++ SET_Response->MessageType = REMOTE_NDIS_SET_CMPLT; ++ SET_Response->MessageLength = sizeof(RNDIS_Set_Complete_t); ++ SET_Response->RequestId = SET_Message->RequestId; ++ ++ void* SetData = &RNDISMessageBuffer[sizeof(RNDIS_Message_Header_t) + ++ SET_Message->InformationBufferOffset]; ++ ++ if (ProcessNDISSet(SET_Oid, SetData, SET_Message->InformationBufferLength)) ++ SET_Response->Status = REMOTE_NDIS_STATUS_SUCCESS; ++ else ++ SET_Response->Status = REMOTE_NDIS_STATUS_NOT_SUPPORTED; ++ ++ break; ++ case REMOTE_NDIS_RESET_MSG: ++ /* Soft reset the adapter */ ++ ++ ResponseReady = true; ++ ++ RNDIS_Reset_Complete_t* RESET_Response = (RNDIS_Reset_Complete_t*)&RNDISMessageBuffer; ++ ++ RESET_Response->MessageType = REMOTE_NDIS_RESET_CMPLT; ++ RESET_Response->MessageLength = sizeof(RNDIS_Reset_Complete_t); ++ RESET_Response->Status = REMOTE_NDIS_STATUS_SUCCESS; ++ RESET_Response->AddressingReset = 0; ++ ++ break; ++ case REMOTE_NDIS_KEEPALIVE_MSG: ++ /* Keep alive message sent to the adapter every 5 seconds when idle to ensure it is still responding */ ++ ++ ResponseReady = true; ++ ++ RNDIS_KeepAlive_Message_t* KEEPALIVE_Message = (RNDIS_KeepAlive_Message_t*)&RNDISMessageBuffer; ++ RNDIS_KeepAlive_Complete_t* KEEPALIVE_Response = (RNDIS_KeepAlive_Complete_t*)&RNDISMessageBuffer; ++ ++ KEEPALIVE_Response->MessageType = REMOTE_NDIS_KEEPALIVE_CMPLT; ++ KEEPALIVE_Response->MessageLength = sizeof(RNDIS_KeepAlive_Complete_t); ++ KEEPALIVE_Response->RequestId = KEEPALIVE_Message->RequestId; ++ KEEPALIVE_Response->Status = REMOTE_NDIS_STATUS_SUCCESS; ++ ++ break; ++ } ++} ++ ++/** Processes RNDIS query commands, retrieving information from the adapter and reporting it back to the host. The requested ++ * parameter is given as an OID value. ++ * ++ * \param[in] OId OId value of the parameter being queried ++ * \param[in] QueryData Pointer to any extra query data being sent by the host to the device inside the RNDIS message buffer ++ * \param[in] QuerySize Size in bytes of the extra query data being sent by the host ++ * \param[out] ResponseData Pointer to the start of the query response inside the RNDIS message buffer ++ * \param[out] ResponseSize Pointer to the size in bytes of the response data being sent to the host ++ * ++ * \return Boolean \c true if the query was handled, \c false otherwise ++ */ ++static bool ProcessNDISQuery(const uint32_t OId, void* QueryData, uint16_t QuerySize, ++ void* ResponseData, uint16_t* ResponseSize) ++{ ++ /* Handler for REMOTE_NDIS_QUERY_MSG messages */ ++ ++ switch (OId) ++ { ++ case OID_GEN_SUPPORTED_LIST: ++ *ResponseSize = sizeof(AdapterSupportedOIDList); ++ ++ /* Copy the list of supported NDIS OID tokens to the response buffer */ ++ memcpy_P(ResponseData, AdapterSupportedOIDList, sizeof(AdapterSupportedOIDList)); ++ ++ return true; ++ case OID_GEN_PHYSICAL_MEDIUM: ++ *ResponseSize = sizeof(uint32_t); ++ ++ /* Indicate that the device is a true ethernet link */ ++ *((uint32_t*)ResponseData) = 0; ++ ++ return true; ++ case OID_GEN_HARDWARE_STATUS: ++ *ResponseSize = sizeof(uint32_t); ++ ++ /* Always indicate hardware ready */ ++ *((uint32_t*)ResponseData) = NDIS_HardwareStatus_Ready; ++ ++ return true; ++ case OID_GEN_MEDIA_SUPPORTED: ++ case OID_GEN_MEDIA_IN_USE: ++ *ResponseSize = sizeof(uint32_t); ++ ++ /* Indicate 802.3 (Ethernet) supported by the adapter */ ++ *((uint32_t*)ResponseData) = REMOTE_NDIS_MEDIUM_802_3; ++ ++ return true; ++ case OID_GEN_VENDOR_ID: ++ *ResponseSize = sizeof(uint32_t); ++ ++ /* Vendor ID 0x0xFFFFFF is reserved for vendors who have not purchased a NDIS VID */ ++ *((uint32_t*)ResponseData) = 0x00FFFFFF; ++ ++ return true; ++ case OID_GEN_MAXIMUM_FRAME_SIZE: ++ case OID_GEN_TRANSMIT_BLOCK_SIZE: ++ case OID_GEN_RECEIVE_BLOCK_SIZE: ++ *ResponseSize = sizeof(uint32_t); ++ ++ /* Indicate that the maximum frame size is the size of the ethernet frame buffer */ ++ *((uint32_t*)ResponseData) = ETHERNET_FRAME_SIZE_MAX; ++ ++ return true; ++ case OID_GEN_VENDOR_DESCRIPTION: ++ *ResponseSize = sizeof(AdapterVendorDescription); ++ ++ /* Copy vendor description string to the response buffer */ ++ memcpy_P(ResponseData, AdapterVendorDescription, sizeof(AdapterVendorDescription)); ++ ++ return true; ++ case OID_GEN_MEDIA_CONNECT_STATUS: ++ *ResponseSize = sizeof(uint32_t); ++ ++ /* Always indicate that the adapter is connected to a network */ ++ *((uint32_t*)ResponseData) = REMOTE_NDIS_MEDIA_STATE_CONNECTED; ++ ++ return true; ++ case OID_GEN_LINK_SPEED: ++ *ResponseSize = sizeof(uint32_t); ++ ++ /* Indicate 10Mb/s link speed */ ++ *((uint32_t*)ResponseData) = 100000; ++ ++ return true; ++ case OID_802_3_PERMANENT_ADDRESS: ++ case OID_802_3_CURRENT_ADDRESS: ++ *ResponseSize = sizeof(MAC_Address_t); ++ ++ /* Copy over the fixed adapter MAC to the response buffer */ ++ memcpy_P(ResponseData, &AdapterMACAddress, sizeof(MAC_Address_t)); ++ ++ return true; ++ case OID_802_3_MAXIMUM_LIST_SIZE: ++ *ResponseSize = sizeof(uint32_t); ++ ++ /* Indicate only one multicast address supported */ ++ *((uint32_t*)ResponseData) = 1; ++ ++ return true; ++ case OID_GEN_CURRENT_PACKET_FILTER: ++ *ResponseSize = sizeof(uint32_t); ++ ++ /* Indicate the current packet filter mask */ ++ *((uint32_t*)ResponseData) = CurrPacketFilter; ++ ++ return true; ++ case OID_GEN_XMIT_OK: ++ case OID_GEN_RCV_OK: ++ case OID_GEN_XMIT_ERROR: ++ case OID_GEN_RCV_ERROR: ++ case OID_GEN_RCV_NO_BUFFER: ++ case OID_802_3_RCV_ERROR_ALIGNMENT: ++ case OID_802_3_XMIT_ONE_COLLISION: ++ case OID_802_3_XMIT_MORE_COLLISIONS: ++ *ResponseSize = sizeof(uint32_t); ++ ++ /* Unused statistic OIDs - always return 0 for each */ ++ *((uint32_t*)ResponseData) = 0; ++ ++ return true; ++ case OID_GEN_MAXIMUM_TOTAL_SIZE: ++ *ResponseSize = sizeof(uint32_t); ++ ++ /* Indicate maximum overall buffer (Ethernet frame and RNDIS header) the adapter can handle */ ++ *((uint32_t*)ResponseData) = (sizeof(RNDISMessageBuffer) + ETHERNET_FRAME_SIZE_MAX); ++ ++ return true; ++ default: ++ return false; ++ } ++} ++ ++/** Processes RNDIS set commands, setting adapter parameters to values given by the host. The requested parameter is given ++ * as an OID value. ++ * ++ * \param[in] OId OId value of the parameter being set ++ * \param[in] SetData Pointer to the parameter value in the RNDIS message buffer ++ * \param[in] SetSize Size in bytes of the parameter value being sent by the host ++ * ++ * \return Boolean \c true if the set was handled, \c false otherwise ++ */ ++static bool ProcessNDISSet(uint32_t OId, void* SetData, uint16_t SetSize) ++{ ++ /* Handler for REMOTE_NDIS_SET_MSG messages */ ++ ++ switch (OId) ++ { ++ case OID_GEN_CURRENT_PACKET_FILTER: ++ /* Save the packet filter mask in case the host queries it again later */ ++ CurrPacketFilter = *((uint32_t*)SetData); ++ ++ /* Set the RNDIS state to initialized if the packet filter is non-zero */ ++ CurrRNDISState = ((CurrPacketFilter) ? RNDIS_Data_Initialized : RNDIS_Initialized); ++ ++ return true; ++ case OID_802_3_MULTICAST_LIST: ++ /* Do nothing - throw away the value from the host as it is unused */ ++ ++ return true; ++ default: ++ return false; ++ } ++} ++ diff --cc lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/RNDIS.h index 000000000,000000000..bea97f79d new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/RNDIS.h @@@ -1,0 -1,0 +1,67 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 RNDIS.c. ++ */ ++ ++#ifndef _RNDIS_H_ ++#define _RNDIS_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <stdbool.h> ++ ++ #include "../RNDISEthernet.h" ++ #include "Ethernet.h" ++ ++ /* External Variables: */ ++ extern uint8_t RNDISMessageBuffer[]; ++ extern RNDIS_Message_Header_t* MessageHeader; ++ extern bool ResponseReady; ++ extern uint8_t CurrRNDISState; ++ ++ /* Function Prototypes: */ ++ void ProcessRNDISControlMessage(void); ++ ++ #if defined(INCLUDE_FROM_RNDIS_C) ++ static bool ProcessNDISQuery(const uint32_t OId, ++ void* QueryData, ++ uint16_t QuerySize, ++ void* ResponseData, ++ uint16_t* ResponseSize); ++ static bool ProcessNDISSet(const uint32_t OId, ++ void* SetData, ++ uint16_t SetSize); ++ #endif ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/TCP.c index 000000000,000000000..a6f1f6adf new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/TCP.c @@@ -1,0 -1,0 +1,631 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * Transmission Control Protocol (TCP) packet handling routines. This protocol handles the reliable in-order transmission ++ * and reception of packets to and from devices on a network, to "ports" on the device. It is used in situations where data ++ * delivery must be reliable and correct, e.g. HTTP, TELNET and most other non-streaming protocols. ++ */ ++ ++#define INCLUDE_FROM_TCP_C ++#include "TCP.h" ++ ++/** Port state table array. This contains the current status of TCP ports in the device. To save on space, only open ports are ++ * stored - closed ports may be overwritten at any time, and the system will assume any ports not present in the array are closed. This ++ * allows for MAX_OPEN_TCP_PORTS to be less than the number of ports used by the application if desired. ++ */ ++TCP_PortState_t PortStateTable[MAX_OPEN_TCP_PORTS]; ++ ++/** Connection state table array. This contains the current status of TCP connections in the device. To save on space, only active ++ * (non-closed) connections are stored - closed connections may be overwritten at any time, and the system will assume any connections ++ * not present in the array are closed. ++ */ ++TCP_ConnectionState_t ConnectionStateTable[MAX_TCP_CONNECTIONS]; ++ ++ ++/** Task to handle the calling of each registered application's callback function, to process and generate TCP packets at the application ++ * level. If an application produces a response, this task constructs the appropriate Ethernet frame and places it into the Ethernet OUT ++ * buffer for later transmission. ++ */ ++void TCP_Task(void) ++{ ++ /* Run each application in sequence, to process incoming and generate outgoing packets */ ++ for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++) ++ { ++ /* Find the corresponding port entry in the port table */ ++ for (uint8_t PTableEntry = 0; PTableEntry < MAX_OPEN_TCP_PORTS; PTableEntry++) ++ { ++ /* Run the application handler for the port */ ++ if ((PortStateTable[PTableEntry].Port == ConnectionStateTable[CSTableEntry].Port) && ++ (PortStateTable[PTableEntry].State == TCP_Port_Open)) ++ { ++ PortStateTable[PTableEntry].ApplicationHandler(&ConnectionStateTable[CSTableEntry], ++ &ConnectionStateTable[CSTableEntry].Info.Buffer); ++ } ++ } ++ } ++ ++ /* Bail out early if there is already a frame waiting to be sent in the Ethernet OUT buffer */ ++ if (FrameOUT.FrameLength) ++ return; ++ ++ /* Send response packets from each application as the TCP packet buffers are filled by the applications */ ++ for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++) ++ { ++ /* For each completely received packet, pass it along to the listening application */ ++ if ((ConnectionStateTable[CSTableEntry].Info.Buffer.Direction == TCP_PACKETDIR_OUT) && ++ (ConnectionStateTable[CSTableEntry].Info.Buffer.Ready)) ++ { ++ Ethernet_Frame_Header_t* FrameOUTHeader = (Ethernet_Frame_Header_t*)&FrameOUT.FrameData; ++ IP_Header_t* IPHeaderOUT = (IP_Header_t*)&FrameOUT.FrameData[sizeof(Ethernet_Frame_Header_t)]; ++ TCP_Header_t* TCPHeaderOUT = (TCP_Header_t*)&FrameOUT.FrameData[sizeof(Ethernet_Frame_Header_t) + ++ sizeof(IP_Header_t)]; ++ void* TCPDataOUT = &FrameOUT.FrameData[sizeof(Ethernet_Frame_Header_t) + ++ sizeof(IP_Header_t) + ++ sizeof(TCP_Header_t)]; ++ ++ uint16_t PacketSize = ConnectionStateTable[CSTableEntry].Info.Buffer.Length; ++ ++ /* Fill out the TCP data */ ++ TCPHeaderOUT->SourcePort = ConnectionStateTable[CSTableEntry].Port; ++ TCPHeaderOUT->DestinationPort = ConnectionStateTable[CSTableEntry].RemotePort; ++ TCPHeaderOUT->SequenceNumber = SwapEndian_32(ConnectionStateTable[CSTableEntry].Info.SequenceNumberOut); ++ TCPHeaderOUT->AcknowledgmentNumber = SwapEndian_32(ConnectionStateTable[CSTableEntry].Info.SequenceNumberIn); ++ TCPHeaderOUT->DataOffset = (sizeof(TCP_Header_t) / sizeof(uint32_t)); ++ TCPHeaderOUT->WindowSize = SwapEndian_16(TCP_WINDOW_SIZE); ++ ++ TCPHeaderOUT->Flags = TCP_FLAG_ACK; ++ TCPHeaderOUT->UrgentPointer = 0; ++ TCPHeaderOUT->Checksum = 0; ++ TCPHeaderOUT->Reserved = 0; ++ ++ memcpy(TCPDataOUT, ConnectionStateTable[CSTableEntry].Info.Buffer.Data, PacketSize); ++ ++ ConnectionStateTable[CSTableEntry].Info.SequenceNumberOut += PacketSize; ++ ++ TCPHeaderOUT->Checksum = TCP_Checksum16(TCPHeaderOUT, &ServerIPAddress, ++ &ConnectionStateTable[CSTableEntry].RemoteAddress, ++ (sizeof(TCP_Header_t) + PacketSize)); ++ ++ PacketSize += sizeof(TCP_Header_t); ++ ++ /* Fill out the response IP header */ ++ IPHeaderOUT->TotalLength = SwapEndian_16(sizeof(IP_Header_t) + PacketSize); ++ IPHeaderOUT->TypeOfService = 0; ++ IPHeaderOUT->HeaderLength = (sizeof(IP_Header_t) / sizeof(uint32_t)); ++ IPHeaderOUT->Version = 4; ++ IPHeaderOUT->Flags = 0; ++ IPHeaderOUT->FragmentOffset = 0; ++ IPHeaderOUT->Identification = 0; ++ IPHeaderOUT->HeaderChecksum = 0; ++ IPHeaderOUT->Protocol = PROTOCOL_TCP; ++ IPHeaderOUT->TTL = DEFAULT_TTL; ++ IPHeaderOUT->SourceAddress = ServerIPAddress; ++ IPHeaderOUT->DestinationAddress = ConnectionStateTable[CSTableEntry].RemoteAddress; ++ ++ IPHeaderOUT->HeaderChecksum = Ethernet_Checksum16(IPHeaderOUT, sizeof(IP_Header_t)); ++ ++ PacketSize += sizeof(IP_Header_t); ++ ++ /* Fill out the response Ethernet frame header */ ++ FrameOUTHeader->Source = ServerMACAddress; ++ FrameOUTHeader->Destination = (MAC_Address_t){{0x02, 0x00, 0x02, 0x00, 0x02, 0x00}}; ++ FrameOUTHeader->EtherType = SwapEndian_16(ETHERTYPE_IPV4); ++ ++ PacketSize += sizeof(Ethernet_Frame_Header_t); ++ ++ /* Set the response length in the buffer and indicate that a response is ready to be sent */ ++ FrameOUT.FrameLength = PacketSize; ++ ++ ConnectionStateTable[CSTableEntry].Info.Buffer.Ready = false; ++ ++ break; ++ } ++ } ++} ++ ++/** Initializes the TCP protocol handler, clearing the port and connection state tables. This must be called before TCP packets are ++ * processed. ++ */ ++void TCP_Init(void) ++{ ++ /* Initialize the port state table with all CLOSED entries */ ++ for (uint8_t PTableEntry = 0; PTableEntry < MAX_OPEN_TCP_PORTS; PTableEntry++) ++ PortStateTable[PTableEntry].State = TCP_Port_Closed; ++ ++ /* Initialize the connection table with all CLOSED entries */ ++ for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++) ++ ConnectionStateTable[CSTableEntry].State = TCP_Connection_Closed; ++} ++ ++/** Sets the state and callback handler of the given port, specified in big endian to the given state. ++ * ++ * \param[in] Port Port whose state and callback function to set, specified in big endian ++ * \param[in] State New state of the port, a value from the \ref TCP_PortStates_t enum ++ * \param[in] Handler Application callback handler for the port ++ * ++ * \return Boolean \c true if the port state was set, \c false otherwise (no more space in the port state table) ++ */ ++bool TCP_SetPortState(const uint16_t Port, ++ const uint8_t State, ++ void (*Handler)(TCP_ConnectionState_t*, TCP_ConnectionBuffer_t*)) ++{ ++ /* Note, Port number should be specified in BIG endian to simplify network code */ ++ ++ /* Check to see if the port entry is already in the port state table */ ++ for (uint8_t PTableEntry = 0; PTableEntry < MAX_OPEN_TCP_PORTS; PTableEntry++) ++ { ++ /* Find existing entry for the port in the table, update it if found */ ++ if (PortStateTable[PTableEntry].Port == Port) ++ { ++ PortStateTable[PTableEntry].State = State; ++ PortStateTable[PTableEntry].ApplicationHandler = Handler; ++ return true; ++ } ++ } ++ ++ /* Check if trying to open the port -- if so we need to find an unused (closed) entry and replace it */ ++ if (State == TCP_Port_Open) ++ { ++ for (uint8_t PTableEntry = 0; PTableEntry < MAX_OPEN_TCP_PORTS; PTableEntry++) ++ { ++ /* Find a closed port entry in the table, change it to the given port and state */ ++ if (PortStateTable[PTableEntry].State == TCP_Port_Closed) ++ { ++ PortStateTable[PTableEntry].Port = Port; ++ PortStateTable[PTableEntry].State = State; ++ PortStateTable[PTableEntry].ApplicationHandler = Handler; ++ return true; ++ } ++ } ++ ++ /* Port not in table and no room to add it, return failure */ ++ return false; ++ } ++ else ++ { ++ /* Port not in table but trying to close it, so operation successful */ ++ return true; ++ } ++} ++ ++/** Retrieves the current state of a given TCP port, specified in big endian. ++ * ++ * \param[in] Port TCP port whose state is to be retrieved, given in big-endian ++ * ++ * \return A value from the \ref TCP_PortStates_t enum ++ */ ++uint8_t TCP_GetPortState(const uint16_t Port) ++{ ++ /* Note, Port number should be specified in BIG endian to simplify network code */ ++ ++ for (uint8_t PTableEntry = 0; PTableEntry < MAX_OPEN_TCP_PORTS; PTableEntry++) ++ { ++ /* Find existing entry for the port in the table, return the port status if found */ ++ if (PortStateTable[PTableEntry].Port == Port) ++ return PortStateTable[PTableEntry].State; ++ } ++ ++ /* Port not in table, assume closed */ ++ return TCP_Port_Closed; ++} ++ ++/** Sets the connection state of the given port, remote address and remote port to the given TCP connection state. If the ++ * connection exists in the connection state table it is updated, otherwise it is created if possible. ++ * ++ * \param[in] Port TCP port of the connection on the device, specified in big endian ++ * \param[in] RemoteAddress Remote protocol IP address of the connected device ++ * \param[in] RemotePort TCP port of the remote device in the connection, specified in big endian ++ * \param[in] State TCP connection state, a value from the \ref TCP_ConnectionStates_t enum ++ * ++ * \return Boolean \c true if the connection was updated or created, \c false otherwise (no more space in the connection state table) ++ */ ++bool TCP_SetConnectionState(const uint16_t Port, ++ const IP_Address_t* RemoteAddress, ++ const uint16_t RemotePort, ++ const uint8_t State) ++{ ++ /* Note, Port number should be specified in BIG endian to simplify network code */ ++ ++ for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++) ++ { ++ /* Find port entry in the table */ ++ if ((ConnectionStateTable[CSTableEntry].Port == Port) && ++ IP_COMPARE(&ConnectionStateTable[CSTableEntry].RemoteAddress, RemoteAddress) && ++ ConnectionStateTable[CSTableEntry].RemotePort == RemotePort) ++ { ++ ConnectionStateTable[CSTableEntry].State = State; ++ return true; ++ } ++ } ++ ++ for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++) ++ { ++ /* Find empty entry in the table */ ++ if (ConnectionStateTable[CSTableEntry].State == TCP_Connection_Closed) ++ { ++ ConnectionStateTable[CSTableEntry].Port = Port; ++ ConnectionStateTable[CSTableEntry].RemoteAddress = *RemoteAddress; ++ ConnectionStateTable[CSTableEntry].RemotePort = RemotePort; ++ ConnectionStateTable[CSTableEntry].State = State; ++ return true; ++ } ++ } ++ ++ return false; ++} ++ ++/** Retrieves the current state of a given TCP connection to a host. ++ * ++ * \param[in] Port TCP port on the device in the connection, specified in big endian ++ * \param[in] RemoteAddress Remote protocol IP address of the connected host ++ * \param[in] RemotePort Remote TCP port of the connected host, specified in big endian ++ * ++ * \return A value from the \ref TCP_ConnectionStates_t enum ++ */ ++uint8_t TCP_GetConnectionState(const uint16_t Port, ++ const IP_Address_t* RemoteAddress, ++ const uint16_t RemotePort) ++{ ++ /* Note, Port number should be specified in BIG endian to simplify network code */ ++ ++ for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++) ++ { ++ /* Find port entry in the table */ ++ if ((ConnectionStateTable[CSTableEntry].Port == Port) && ++ IP_COMPARE(&ConnectionStateTable[CSTableEntry].RemoteAddress, RemoteAddress) && ++ ConnectionStateTable[CSTableEntry].RemotePort == RemotePort) ++ ++ { ++ return ConnectionStateTable[CSTableEntry].State; ++ } ++ } ++ ++ return TCP_Connection_Closed; ++} ++ ++/** Retrieves the connection info structure of a given connection to a host. ++ * ++ * \param[in] Port TCP port on the device in the connection, specified in big endian ++ * \param[in] RemoteAddress Remote protocol IP address of the connected host ++ * \param[in] RemotePort Remote TCP port of the connected host, specified in big endian ++ * ++ * \return ConnectionInfo structure of the connection if found, NULL otherwise ++ */ ++TCP_ConnectionInfo_t* TCP_GetConnectionInfo(const uint16_t Port, ++ const IP_Address_t* RemoteAddress, ++ const uint16_t RemotePort) ++{ ++ /* Note, Port number should be specified in BIG endian to simplify network code */ ++ ++ for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++) ++ { ++ /* Find port entry in the table */ ++ if ((ConnectionStateTable[CSTableEntry].Port == Port) && ++ IP_COMPARE(&ConnectionStateTable[CSTableEntry].RemoteAddress, RemoteAddress) && ++ ConnectionStateTable[CSTableEntry].RemotePort == RemotePort) ++ { ++ return &ConnectionStateTable[CSTableEntry].Info; ++ } ++ } ++ ++ return NULL; ++} ++ ++/** Processes a TCP packet inside an Ethernet frame, and writes the appropriate response ++ * to the output Ethernet frame if one is created by a application handler. ++ * ++ * \param[in] IPHeaderInStart Pointer to the start of the incoming packet's IP header ++ * \param[in] TCPHeaderInStart Pointer to the start of the incoming packet's TCP header ++ * \param[out] TCPHeaderOutStart Pointer to the start of the outgoing packet's TCP header ++ * ++ * \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE if no ++ * response was generated, NO_PROCESS if the packet processing was deferred until the ++ * next Ethernet packet handler iteration ++ */ ++int16_t TCP_ProcessTCPPacket(void* IPHeaderInStart, ++ void* TCPHeaderInStart, ++ void* TCPHeaderOutStart) ++{ ++ IP_Header_t* IPHeaderIN = (IP_Header_t*)IPHeaderInStart; ++ TCP_Header_t* TCPHeaderIN = (TCP_Header_t*)TCPHeaderInStart; ++ TCP_Header_t* TCPHeaderOUT = (TCP_Header_t*)TCPHeaderOutStart; ++ ++ TCP_ConnectionInfo_t* ConnectionInfo; ++ ++ DecodeTCPHeader(TCPHeaderInStart); ++ ++ bool PacketResponse = false; ++ ++ /* Check if the destination port is open and allows incoming connections */ ++ if (TCP_GetPortState(TCPHeaderIN->DestinationPort) == TCP_Port_Open) ++ { ++ /* Detect SYN from host to start a connection */ ++ if (TCPHeaderIN->Flags & TCP_FLAG_SYN) ++ TCP_SetConnectionState(TCPHeaderIN->DestinationPort, &IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort, TCP_Connection_Listen); ++ ++ /* Detect RST from host to abort existing connection */ ++ if (TCPHeaderIN->Flags & TCP_FLAG_RST) ++ { ++ if (TCP_SetConnectionState(TCPHeaderIN->DestinationPort, &IPHeaderIN->SourceAddress, ++ TCPHeaderIN->SourcePort, TCP_Connection_Closed)) ++ { ++ TCPHeaderOUT->Flags = (TCP_FLAG_RST | TCP_FLAG_ACK); ++ PacketResponse = true; ++ } ++ } ++ else ++ { ++ /* Process the incoming TCP packet based on the current connection state for the sender and port */ ++ switch (TCP_GetConnectionState(TCPHeaderIN->DestinationPort, &IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort)) ++ { ++ case TCP_Connection_Listen: ++ if (TCPHeaderIN->Flags == TCP_FLAG_SYN) ++ { ++ /* SYN connection starts a connection with a peer */ ++ if (TCP_SetConnectionState(TCPHeaderIN->DestinationPort, &IPHeaderIN->SourceAddress, ++ TCPHeaderIN->SourcePort, TCP_Connection_SYNReceived)) ++ { ++ TCPHeaderOUT->Flags = (TCP_FLAG_SYN | TCP_FLAG_ACK); ++ ++ ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, &IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort); ++ ++ ConnectionInfo->SequenceNumberIn = (SwapEndian_32(TCPHeaderIN->SequenceNumber) + 1); ++ ConnectionInfo->SequenceNumberOut = 0; ++ ConnectionInfo->Buffer.InUse = false; ++ } ++ else ++ { ++ TCPHeaderOUT->Flags = TCP_FLAG_RST; ++ } ++ ++ PacketResponse = true; ++ } ++ ++ break; ++ case TCP_Connection_SYNReceived: ++ if (TCPHeaderIN->Flags == TCP_FLAG_ACK) ++ { ++ /* ACK during the connection process completes the connection to a peer */ ++ ++ TCP_SetConnectionState(TCPHeaderIN->DestinationPort, &IPHeaderIN->SourceAddress, ++ TCPHeaderIN->SourcePort, TCP_Connection_Established); ++ ++ ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, &IPHeaderIN->SourceAddress, ++ TCPHeaderIN->SourcePort); ++ ++ ConnectionInfo->SequenceNumberOut++; ++ } ++ ++ break; ++ case TCP_Connection_Established: ++ if (TCPHeaderIN->Flags == (TCP_FLAG_FIN | TCP_FLAG_ACK)) ++ { ++ /* FIN ACK when connected to a peer starts the finalization process */ ++ ++ TCPHeaderOUT->Flags = (TCP_FLAG_FIN | TCP_FLAG_ACK); ++ PacketResponse = true; ++ ++ TCP_SetConnectionState(TCPHeaderIN->DestinationPort, &IPHeaderIN->SourceAddress, ++ TCPHeaderIN->SourcePort, TCP_Connection_CloseWait); ++ ++ ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, &IPHeaderIN->SourceAddress, ++ TCPHeaderIN->SourcePort); ++ ++ ConnectionInfo->SequenceNumberIn++; ++ ConnectionInfo->SequenceNumberOut++; ++ } ++ else if ((TCPHeaderIN->Flags == TCP_FLAG_ACK) || (TCPHeaderIN->Flags == (TCP_FLAG_ACK | TCP_FLAG_PSH))) ++ { ++ ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, &IPHeaderIN->SourceAddress, ++ TCPHeaderIN->SourcePort); ++ ++ /* Check if the buffer is currently in use either by a buffered data to send, or receive */ ++ if ((ConnectionInfo->Buffer.InUse == false) && (ConnectionInfo->Buffer.Ready == false)) ++ { ++ ConnectionInfo->Buffer.Direction = TCP_PACKETDIR_IN; ++ ConnectionInfo->Buffer.InUse = true; ++ ConnectionInfo->Buffer.Length = 0; ++ } ++ ++ /* Check if the buffer has been claimed by us to read in data from the peer */ ++ if ((ConnectionInfo->Buffer.Direction == TCP_PACKETDIR_IN) && ++ (ConnectionInfo->Buffer.Length != TCP_WINDOW_SIZE)) ++ { ++ uint16_t IPOffset = (IPHeaderIN->HeaderLength * sizeof(uint32_t)); ++ uint16_t TCPOffset = (TCPHeaderIN->DataOffset * sizeof(uint32_t)); ++ uint16_t DataLength = (SwapEndian_16(IPHeaderIN->TotalLength) - IPOffset - TCPOffset); ++ ++ /* Copy the packet data into the buffer */ ++ memcpy(&ConnectionInfo->Buffer.Data[ConnectionInfo->Buffer.Length], ++ &((uint8_t*)TCPHeaderInStart)[TCPOffset], ++ DataLength); ++ ++ ConnectionInfo->SequenceNumberIn += DataLength; ++ ConnectionInfo->Buffer.Length += DataLength; ++ ++ /* Check if the buffer is full or if the PSH flag is set, if so indicate buffer ready */ ++ if ((!(TCP_WINDOW_SIZE - ConnectionInfo->Buffer.Length)) || (TCPHeaderIN->Flags & TCP_FLAG_PSH)) ++ { ++ ConnectionInfo->Buffer.InUse = false; ++ ConnectionInfo->Buffer.Ready = true; ++ ++ TCPHeaderOUT->Flags = TCP_FLAG_ACK; ++ PacketResponse = true; ++ } ++ } ++ else ++ { ++ /* Buffer is currently in use by the application, defer processing of the incoming packet */ ++ return NO_PROCESS; ++ } ++ } ++ ++ break; ++ case TCP_Connection_Closing: ++ ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, &IPHeaderIN->SourceAddress, ++ TCPHeaderIN->SourcePort); ++ ++ TCPHeaderOUT->Flags = (TCP_FLAG_ACK | TCP_FLAG_FIN); ++ PacketResponse = true; ++ ++ ConnectionInfo->Buffer.InUse = false; ++ ++ TCP_SetConnectionState(TCPHeaderIN->DestinationPort, &IPHeaderIN->SourceAddress, ++ TCPHeaderIN->SourcePort, TCP_Connection_FINWait1); ++ ++ break; ++ case TCP_Connection_FINWait1: ++ if (TCPHeaderIN->Flags == (TCP_FLAG_FIN | TCP_FLAG_ACK)) ++ { ++ ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, &IPHeaderIN->SourceAddress, ++ TCPHeaderIN->SourcePort); ++ ++ TCPHeaderOUT->Flags = TCP_FLAG_ACK; ++ PacketResponse = true; ++ ++ ConnectionInfo->SequenceNumberIn++; ++ ConnectionInfo->SequenceNumberOut++; ++ ++ TCP_SetConnectionState(TCPHeaderIN->DestinationPort, &IPHeaderIN->SourceAddress, ++ TCPHeaderIN->SourcePort, TCP_Connection_Closed); ++ } ++ else if (TCPHeaderIN->Flags == TCP_FLAG_ACK) ++ { ++ TCP_SetConnectionState(TCPHeaderIN->DestinationPort, &IPHeaderIN->SourceAddress, ++ TCPHeaderIN->SourcePort, TCP_Connection_FINWait2); ++ } ++ ++ break; ++ case TCP_Connection_FINWait2: ++ if (TCPHeaderIN->Flags == (TCP_FLAG_FIN | TCP_FLAG_ACK)) ++ { ++ ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, &IPHeaderIN->SourceAddress, ++ TCPHeaderIN->SourcePort); ++ ++ TCPHeaderOUT->Flags = TCP_FLAG_ACK; ++ PacketResponse = true; ++ ++ ConnectionInfo->SequenceNumberIn++; ++ ConnectionInfo->SequenceNumberOut++; ++ ++ TCP_SetConnectionState(TCPHeaderIN->DestinationPort, &IPHeaderIN->SourceAddress, ++ TCPHeaderIN->SourcePort, TCP_Connection_Closed); ++ } ++ ++ break; ++ case TCP_Connection_CloseWait: ++ if (TCPHeaderIN->Flags == TCP_FLAG_ACK) ++ { ++ TCP_SetConnectionState(TCPHeaderIN->DestinationPort, &IPHeaderIN->SourceAddress, ++ TCPHeaderIN->SourcePort, TCP_Connection_Closed); ++ } ++ ++ break; ++ } ++ } ++ } ++ else ++ { ++ /* Port is not open, indicate via a RST/ACK response to the sender */ ++ TCPHeaderOUT->Flags = (TCP_FLAG_RST | TCP_FLAG_ACK); ++ PacketResponse = true; ++ } ++ ++ /* Check if we need to respond to the sent packet */ ++ if (PacketResponse) ++ { ++ ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, &IPHeaderIN->SourceAddress, ++ TCPHeaderIN->SourcePort); ++ ++ TCPHeaderOUT->SourcePort = TCPHeaderIN->DestinationPort; ++ TCPHeaderOUT->DestinationPort = TCPHeaderIN->SourcePort; ++ TCPHeaderOUT->SequenceNumber = SwapEndian_32(ConnectionInfo->SequenceNumberOut); ++ TCPHeaderOUT->AcknowledgmentNumber = SwapEndian_32(ConnectionInfo->SequenceNumberIn); ++ TCPHeaderOUT->DataOffset = (sizeof(TCP_Header_t) / sizeof(uint32_t)); ++ ++ if (!(ConnectionInfo->Buffer.InUse)) ++ TCPHeaderOUT->WindowSize = SwapEndian_16(TCP_WINDOW_SIZE); ++ else ++ TCPHeaderOUT->WindowSize = SwapEndian_16(TCP_WINDOW_SIZE - ConnectionInfo->Buffer.Length); ++ ++ TCPHeaderOUT->UrgentPointer = 0; ++ TCPHeaderOUT->Checksum = 0; ++ TCPHeaderOUT->Reserved = 0; ++ ++ TCPHeaderOUT->Checksum = TCP_Checksum16(TCPHeaderOUT, &IPHeaderIN->DestinationAddress, ++ &IPHeaderIN->SourceAddress, sizeof(TCP_Header_t)); ++ ++ return sizeof(TCP_Header_t); ++ } ++ ++ return NO_RESPONSE; ++} ++ ++/** Calculates the appropriate TCP checksum, consisting of the addition of the one's compliment of each word, ++ * complimented. ++ * ++ * \param[in] TCPHeaderOutStart Pointer to the start of the packet's outgoing TCP header ++ * \param[in] SourceAddress Source protocol IP address of the outgoing IP header ++ * \param[in] DestinationAddress Destination protocol IP address of the outgoing IP header ++ * \param[in] TCPOutSize Size in bytes of the TCP data header and payload ++ * ++ * \return A 16-bit TCP checksum value ++ */ ++static uint16_t TCP_Checksum16(void* TCPHeaderOutStart, ++ const IP_Address_t* SourceAddress, ++ const IP_Address_t* DestinationAddress, ++ uint16_t TCPOutSize) ++{ ++ uint32_t Checksum = 0; ++ ++ /* TCP/IP checksums are the addition of the one's compliment of each word including the IP pseudo-header, ++ complimented */ ++ ++ Checksum += ((uint16_t*)SourceAddress)[0]; ++ Checksum += ((uint16_t*)SourceAddress)[1]; ++ Checksum += ((uint16_t*)DestinationAddress)[0]; ++ Checksum += ((uint16_t*)DestinationAddress)[1]; ++ Checksum += SwapEndian_16(PROTOCOL_TCP); ++ Checksum += SwapEndian_16(TCPOutSize); ++ ++ for (uint16_t CurrWord = 0; CurrWord < (TCPOutSize >> 1); CurrWord++) ++ Checksum += ((uint16_t*)TCPHeaderOutStart)[CurrWord]; ++ ++ if (TCPOutSize & 0x01) ++ Checksum += (((uint16_t*)TCPHeaderOutStart)[TCPOutSize >> 1] & 0x00FF); ++ ++ while (Checksum & 0xFFFF0000) ++ Checksum = ((Checksum & 0xFFFF) + (Checksum >> 16)); ++ ++ return ~Checksum; ++} ++ diff --cc lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/TCP.h index 000000000,000000000..ce8a9a2d0 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/TCP.h @@@ -1,0 -1,0 +1,260 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 TCP.c. ++ */ ++ ++#ifndef _TCP_H_ ++#define _TCP_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <stdbool.h> ++ ++ #include "EthernetProtocols.h" ++ #include "Ethernet.h" ++ #include "ProtocolDecoders.h" ++ ++ /* Macros: */ ++ /** Maximum number of TCP ports which can be open at the one time. */ ++ #define MAX_OPEN_TCP_PORTS 1 ++ ++ /** Maximum number of TCP connections which can be sustained at the one time. */ ++ #define MAX_TCP_CONNECTIONS 3 ++ ++ /** TCP window size, giving the maximum number of bytes which can be buffered at the one time. */ ++ #define TCP_WINDOW_SIZE 512 ++ ++ /** Port number for HTTP transmissions. */ ++ #define TCP_PORT_HTTP SwapEndian_16(80) ++ ++ /** Data direction indicator for a TCP application buffer, indicating data from host-to-device. */ ++ #define TCP_PACKETDIR_IN false ++ ++ /** Data direction indicator for a TCP application buffer, indicating data from device-to-host. */ ++ #define TCP_PACKETDIR_OUT true ++ ++ /** Congestion Window Reduced TCP flag mask. */ ++ #define TCP_FLAG_CWR (1 << 7) ++ ++ /** Explicit Congestion Notification TCP flag mask. */ ++ #define TCP_FLAG_ECE (1 << 6) ++ ++ /** Urgent TCP flag mask. */ ++ #define TCP_FLAG_URG (1 << 5) ++ ++ /** Data Acknowledge TCP flag mask. */ ++ #define TCP_FLAG_ACK (1 << 4) ++ ++ /** Data Push TCP flag mask. */ ++ #define TCP_FLAG_PSH (1 << 3) ++ ++ /** Reset TCP flag mask. */ ++ #define TCP_FLAG_RST (1 << 2) ++ ++ /** Synchronize TCP flag mask. */ ++ #define TCP_FLAG_SYN (1 << 1) ++ ++ /** Connection Finalize TCP flag mask. */ ++ #define TCP_FLAG_FIN (1 << 0) ++ ++ /** Application macro: Determines if the given application buffer contains a packet received from the host ++ * ++ * \param[in] Buffer Application buffer to check ++ * ++ * \return Boolean \c true if the buffer contains a packet from the host, \c false otherwise ++ */ ++ #define TCP_APP_HAS_RECEIVED_PACKET(Buffer) (Buffer->Ready && (Buffer->Direction == TCP_PACKETDIR_IN)) ++ ++ /** Application macro: Indicates if the application buffer is currently locked by the application for device-to-host transfers. ++ * ++ * \param[in] Buffer Application buffer to check ++ * ++ * \return Boolean \c true if the buffer has been captured by the application for device-to-host transmissions, \c false otherwise ++ */ ++ #define TCP_APP_HAVE_CAPTURED_BUFFER(Buffer) (!(Buffer->Ready) && Buffer->InUse && \ ++ (Buffer->Direction == TCP_PACKETDIR_OUT)) ++ ++ /** Application macro: Indicates if the application can lock the buffer for multiple continued device-to-host transmissions. ++ * ++ * \param[in] Buffer Application buffer to check ++ * ++ * \return Boolean \c true if the buffer may be captured by the application for device-to-host transmissions, \c false otherwise ++ */ ++ #define TCP_APP_CAN_CAPTURE_BUFFER(Buffer) Buffer->InUse ++ ++ /** Application macro: Captures the application buffer, locking it for device-to-host transmissions only. This should be ++ * performed when the application needs to transmit several packets worth of data in succession with no interruptions from the host. ++ * ++ * \pre The application must check that the buffer can be locked first using TCP_APP_CAN_CAPTURE_BUFFER(). ++ * ++ * \param[in] Buffer Application buffer to lock ++ */ ++ #define TCP_APP_CAPTURE_BUFFER(Buffer) do { Buffer->Direction = TCP_PACKETDIR_OUT; Buffer->InUse = true; } while (0) ++ ++ /** Application macro: Releases a captured application buffer, allowing for host-to-device packets to be received. ++ * ++ * \param[in] Buffer Application buffer to release ++ */ ++ #define TCP_APP_RELEASE_BUFFER(Buffer) do { Buffer->InUse = false; } while (0) ++ ++ /** Application macro: Sends the contents of the given application buffer to the host. ++ * ++ * \param[in] Buffer Application buffer to send ++ * \param[in] Len Length of data contained in the buffer ++ */ ++ #define TCP_APP_SEND_BUFFER(Buffer, Len) do { Buffer->Direction = TCP_PACKETDIR_OUT; Buffer->Length = Len; Buffer->Ready = true; } while (0) ++ ++ /** Application macro: Clears the application buffer, ready for a packet to be written to it. ++ * ++ * \param[in] Buffer Application buffer to clear ++ */ ++ #define TCP_APP_CLEAR_BUFFER(Buffer) do { Buffer->Ready = false; Buffer->Length = 0; } while (0) ++ ++ /** Application macro: Closes an open connection to a host. ++ * ++ * \param[in] Connection Open TCP connection to close ++ */ ++ #define TCP_APP_CLOSECONNECTION(Connection) do { Connection->State = TCP_Connection_Closing; } while (0) ++ ++ /* Enums: */ ++ /** Enum for possible TCP port states. */ ++ enum TCP_PortStates_t ++ { ++ TCP_Port_Closed = 0, /**< TCP port closed, no connections to a host may be made on this port. */ ++ TCP_Port_Open = 1, /**< TCP port open, connections to a host may be made on this port. */ ++ }; ++ ++ /** Enum for possible TCP connection states. */ ++ enum TCP_ConnectionStates_t ++ { ++ TCP_Connection_Listen = 0, /**< Listening for a connection from a host */ ++ TCP_Connection_SYNSent = 1, /**< Unused */ ++ TCP_Connection_SYNReceived = 2, /**< SYN received, waiting for ACK */ ++ TCP_Connection_Established = 3, /**< Connection established in both directions */ ++ TCP_Connection_FINWait1 = 4, /**< Closing, waiting for ACK */ ++ TCP_Connection_FINWait2 = 5, /**< Closing, waiting for FIN ACK */ ++ TCP_Connection_CloseWait = 6, /**< Closing, waiting for ACK */ ++ TCP_Connection_Closing = 7, /**< Unused */ ++ TCP_Connection_LastACK = 8, /**< Unused */ ++ TCP_Connection_TimeWait = 9, /**< Unused */ ++ TCP_Connection_Closed = 10, /**< Connection closed in both directions */ ++ }; ++ ++ /* Type Defines: */ ++ /** Type define for a TCP connection buffer structure, including size, data and direction. */ ++ typedef struct ++ { ++ uint16_t Length; /**< Length of data in the TCP application buffer */ ++ uint8_t Data[TCP_WINDOW_SIZE]; /**< TCP application data buffer */ ++ bool Direction; /**< Buffer transmission direction, either TCP_PACKETDIR_IN or TCP_PACKETDIR_OUT */ ++ bool Ready; /**< If data from host, indicates buffer ready to be read, otherwise indicates ++ * buffer ready to be sent to the host ++ */ ++ bool InUse; /**< Indicates if the buffer is locked to to the current direction, and cannot be changed */ ++ } TCP_ConnectionBuffer_t; ++ ++ /** Type define for a TCP connection information structure. */ ++ typedef struct ++ { ++ uint32_t SequenceNumberIn; /**< Current TCP sequence number for host-to-device */ ++ uint32_t SequenceNumberOut; /**< Current TCP sequence number for device-to-host */ ++ TCP_ConnectionBuffer_t Buffer; /**< Connection application data buffer */ ++ } TCP_ConnectionInfo_t; ++ ++ /** Type define for a complete TCP connection state. */ ++ typedef struct ++ { ++ uint16_t Port; /**< Connection port number on the device */ ++ uint16_t RemotePort; /**< Connection port number on the host */ ++ IP_Address_t RemoteAddress; /**< Connection protocol IP address of the host */ ++ TCP_ConnectionInfo_t Info; /**< Connection information, including application buffer */ ++ uint8_t State; /**< Current connection state, a value from the \ref TCP_ConnectionStates_t enum */ ++ } TCP_ConnectionState_t; ++ ++ /** Type define for a TCP port state. */ ++ typedef struct ++ { ++ uint16_t Port; /**< TCP port number on the device */ ++ uint8_t State; /**< Current port state, a value from the \ref TCP_PortStates_t enum */ ++ void (*ApplicationHandler) (TCP_ConnectionState_t* ConnectionState, ++ TCP_ConnectionBuffer_t* Buffer); /**< Port application handler */ ++ } TCP_PortState_t; ++ ++ /** Type define for a TCP packet header. */ ++ typedef struct ++ { ++ uint16_t SourcePort; /**< Source port of the TCP packet */ ++ uint16_t DestinationPort; /**< Destination port of the TCP packet */ ++ ++ uint32_t SequenceNumber; /**< Data sequence number of the packet */ ++ uint32_t AcknowledgmentNumber; /**< Data acknowledgment number of the packet */ ++ ++ unsigned Reserved : 4; /**< Reserved, must be all 0 */ ++ unsigned DataOffset : 4; /**< Offset of the data from the start of the header, in 4 byte chunks */ ++ uint8_t Flags; /**< TCP packet flags */ ++ uint16_t WindowSize; /**< Current data window size (bytes remaining in reception buffer) */ ++ ++ uint16_t Checksum; /**< TCP checksum */ ++ uint16_t UrgentPointer; /**< Urgent data pointer */ ++ } TCP_Header_t; ++ ++ /* Function Prototypes: */ ++ void TCP_Init(void); ++ void TCP_Task(void); ++ bool TCP_SetPortState(const uint16_t Port, ++ const uint8_t State, ++ void (*Handler)(TCP_ConnectionState_t*, TCP_ConnectionBuffer_t*)); ++ uint8_t TCP_GetPortState(const uint16_t Port); ++ bool TCP_SetConnectionState(const uint16_t Port, ++ const IP_Address_t* RemoteAddress, ++ const uint16_t RemotePort, ++ const uint8_t State); ++ uint8_t TCP_GetConnectionState(const uint16_t Port, ++ const IP_Address_t* RemoteAddress, ++ const uint16_t RemotePort); ++ TCP_ConnectionInfo_t* TCP_GetConnectionInfo(const uint16_t Port, ++ const IP_Address_t* RemoteAddress, ++ const uint16_t RemotePort); ++ int16_t TCP_ProcessTCPPacket(void* IPHeaderInStart, ++ void* TCPHeaderInStart, ++ void* TCPHeaderOutStart); ++ ++ #if defined(INCLUDE_FROM_TCP_C) ++ static uint16_t TCP_Checksum16(void* TCPHeaderOutStart, ++ const IP_Address_t* SourceAddress, ++ const IP_Address_t* DestinationAddress, ++ uint16_t TCPOutSize); ++ #endif ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/UDP.c index 000000000,000000000..03c19e00e new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/UDP.c @@@ -1,0 -1,0 +1,84 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * User Datagram Protocol (UDP) packet handling routines. This protocol handles high throughput, low ++ * reliability packets which are typically used to encapsulate streaming data. ++ */ ++ ++#define INCLUDE_FROM_UDP_C ++#include "UDP.h" ++ ++/** Processes a UDP packet inside an Ethernet frame, and writes the appropriate response ++ * to the output Ethernet frame if a sub-protocol handler has created a response packet. ++ * ++ * \param[in] IPHeaderInStart Pointer to the start of the incoming packet's IP header ++ * \param[in] UDPHeaderInStart Pointer to the start of the incoming packet's UDP header ++ * \param[out] UDPHeaderOutStart Pointer to the start of the outgoing packet's UDP header ++ * ++ * \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise ++ */ ++int16_t UDP_ProcessUDPPacket(void* IPHeaderInStart, ++ void* UDPHeaderInStart, ++ void* UDPHeaderOutStart) ++{ ++ UDP_Header_t* UDPHeaderIN = (UDP_Header_t*)UDPHeaderInStart; ++ UDP_Header_t* UDPHeaderOUT = (UDP_Header_t*)UDPHeaderOutStart; ++ ++ int16_t RetSize = NO_RESPONSE; ++ ++ DecodeUDPHeader(UDPHeaderInStart); ++ ++ switch (SwapEndian_16(UDPHeaderIN->DestinationPort)) ++ { ++ case UDP_PORT_DHCP_REQUEST: ++ RetSize = DHCP_ProcessDHCPPacket(IPHeaderInStart, ++ &((uint8_t*)UDPHeaderInStart)[sizeof(UDP_Header_t)], ++ &((uint8_t*)UDPHeaderOutStart)[sizeof(UDP_Header_t)]); ++ break; ++ } ++ ++ /* Check to see if the protocol processing routine has filled out a response */ ++ if (RetSize > 0) ++ { ++ /* Fill out the response UDP packet header */ ++ UDPHeaderOUT->SourcePort = UDPHeaderIN->DestinationPort; ++ UDPHeaderOUT->DestinationPort = UDPHeaderIN->SourcePort; ++ UDPHeaderOUT->Checksum = 0; ++ UDPHeaderOUT->Length = SwapEndian_16(sizeof(UDP_Header_t) + RetSize); ++ ++ /* Return the size of the response so far */ ++ return (sizeof(UDP_Header_t) + RetSize); ++ } ++ ++ return NO_RESPONSE; ++} ++ diff --cc lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/UDP.h index 000000000,000000000..d008cb8ed new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/UDP.h @@@ -1,0 -1,0 +1,73 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 UDP.c. ++ */ ++ ++#ifndef _UDP_H_ ++#define _UDP_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ ++ #include "EthernetProtocols.h" ++ #include "Ethernet.h" ++ #include "ProtocolDecoders.h" ++ #include "DHCP.h" ++ ++ /* Macros: */ ++ /** Source UDP port for a DHCP request. */ ++ #define UDP_PORT_DHCP_REQUEST 67 ++ ++ /** Destination UDP port for a DHCP reply. */ ++ #define UDP_PORT_DHCP_REPLY 68 ++ ++ /** Source UDP port for a DNS request/response. */ ++ #define UDP_PORT_DNS 53 ++ ++ /* Type Defines: */ ++ /** Type define for a UDP packet header. */ ++ typedef struct ++ { ++ uint16_t SourcePort; /**< Packet source port */ ++ uint16_t DestinationPort; /**< Packet destination port */ ++ uint16_t Length; /**< Total packet length, in bytes */ ++ uint16_t Checksum; /**< Optional UDP packet checksum */ ++ } UDP_Header_t; ++ ++ /* Function Prototypes: */ ++ int16_t UDP_ProcessUDPPacket(void* IPHeaderInStart, ++ void* UDPHeaderInStart, ++ void* UDPHeaderOutStart); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/Webserver.c index 000000000,000000000..e0d9e3647 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/Webserver.c @@@ -1,0 -1,0 +1,203 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * Simple webserver application for demonstrating the RNDIS demo and TCP/IP stack. This ++ * application will serve up a static HTTP webpage when requested by the host. ++ */ ++ ++#include "Webserver.h" ++ ++/** HTTP server response header, for transmission before the page contents. This indicates to the host that a page exists at the ++ * given location, and gives extra connection information. ++ */ ++const char PROGMEM HTTP200Header[] = "HTTP/1.1 200 OK\r\n" ++ "Server: LUFA RNDIS\r\n" ++ "Content-type: text/html\r\n" ++ "Connection: close\r\n\r\n"; ++ ++/** HTTP server response header, for transmission before a resource not found error. This indicates to the host that the given ++ * given URL is invalid, and gives extra error information. ++ */ ++const char PROGMEM HTTP404Header[] = "HTTP/1.1 404 Not Found\r\n" ++ "Server: LUFA RNDIS\r\n" ++ "Connection: close\r\n\r\n"; ++ ++/** HTTP page to serve to the host when a HTTP request is made. This page is too long for a single response, thus it is automatically ++ * broken up into smaller blocks and sent as a series of packets each time the webserver application callback is run. ++ */ ++const char PROGMEM HTTPPage[] = ++ "<html>" ++ " <head>" ++ " <title>" ++ " LUFA Webserver Demo" ++ " </title>" ++ " </head>" ++ " <body>" ++ " <h1>Hello from your USB AVR!</h1>" ++ " <p>" ++ " Hello! Welcome to the LUFA RNDIS Demo Webserver test page, running on your USB AVR via the LUFA library. This demonstrates the HTTP webserver, TCP/IP stack and RNDIS demo all running atop the LUFA USB stack." ++ " <br /><br />" ++ " <small>Project Information: <a href=\"http://www.lufa-lib.org\">http://www.lufa-lib.org</a>.</small>" ++ " <hr />" ++ " <i>LUFA Version: </i>" LUFA_VERSION_STRING ++ " </p>" ++ " </body>" ++ "</html>"; ++ ++ ++/** Initializes the Webserver application, opening the appropriate HTTP port in the TCP handler and registering the application ++ * callback routine for packets sent to the HTTP protocol port. ++ */ ++void Webserver_Init(void) ++{ ++ /* Open the HTTP port in the TCP protocol so that HTTP connections to the device can be established */ ++ TCP_SetPortState(TCP_PORT_HTTP, TCP_Port_Open, Webserver_ApplicationCallback); ++} ++ ++/** Indicates if a given request equals the given HTTP command. ++ * ++ * \param[in] RequestHeader HTTP request made by the host ++ * \param[in] Command HTTP command to compare the request to ++ * ++ * \return Boolean \c true if the command matches the request, \c false otherwise ++ */ ++static bool IsHTTPCommand(uint8_t* RequestHeader, ++ char* Command) ++{ ++ /* Returns true if the non null terminated string in RequestHeader matches the null terminated string Command */ ++ return (strncmp((char*)RequestHeader, Command, strlen(Command)) == 0); ++} ++ ++/** Application callback routine, executed each time the TCP processing task runs. This callback determines what request ++ * has been made (if any), and serves up appropriate responses. ++ * ++ * \param[in] ConnectionState Pointer to a TCP Connection State structure giving connection information ++ * \param[in,out] Buffer Pointer to the application's send/receive packet buffer ++ */ ++void Webserver_ApplicationCallback(TCP_ConnectionState_t* const ConnectionState, ++ TCP_ConnectionBuffer_t* const Buffer) ++{ ++ char* BufferDataStr = (char*)Buffer->Data; ++ static uint8_t PageBlock = 0; ++ ++ /* Check to see if a packet has been received on the HTTP port from a remote host */ ++ if (TCP_APP_HAS_RECEIVED_PACKET(Buffer)) ++ { ++ if (IsHTTPCommand(Buffer->Data, "GET")) ++ { ++ if (IsHTTPCommand(Buffer->Data, "GET / ")) ++ { ++ PageBlock = 0; ++ ++ /* Copy the HTTP 200 response header into the packet buffer */ ++ strcpy_P(BufferDataStr, HTTP200Header); ++ ++ /* Send the buffer contents to the host */ ++ TCP_APP_SEND_BUFFER(Buffer, strlen(BufferDataStr)); ++ ++ /* Lock the buffer to Device->Host transmissions only while we send the page contents */ ++ TCP_APP_CAPTURE_BUFFER(Buffer); ++ } ++ else ++ { ++ /* Copy the HTTP 404 response header into the packet buffer */ ++ strcpy_P(BufferDataStr, HTTP404Header); ++ ++ /* Send the buffer contents to the host */ ++ TCP_APP_SEND_BUFFER(Buffer, strlen(BufferDataStr)); ++ ++ /* All data sent, close the connection */ ++ TCP_APP_CLOSECONNECTION(ConnectionState); ++ } ++ } ++ else if (IsHTTPCommand(Buffer->Data, "HEAD")) ++ { ++ if (IsHTTPCommand(Buffer->Data, "HEAD / ")) ++ { ++ /* Copy the HTTP response header into the packet buffer */ ++ strcpy_P(BufferDataStr, HTTP200Header); ++ ++ /* Send the buffer contents to the host */ ++ TCP_APP_SEND_BUFFER(Buffer, strlen(BufferDataStr)); ++ } ++ else ++ { ++ /* Copy the HTTP response header into the packet buffer */ ++ strcpy_P(BufferDataStr, HTTP404Header); ++ ++ /* Send the buffer contents to the host */ ++ TCP_APP_SEND_BUFFER(Buffer, strlen(BufferDataStr)); ++ } ++ ++ /* All data sent, close the connection */ ++ TCP_APP_CLOSECONNECTION(ConnectionState); ++ } ++ else if (IsHTTPCommand(Buffer->Data, "TRACE")) ++ { ++ /* Echo the host's query back to the host */ ++ TCP_APP_SEND_BUFFER(Buffer, Buffer->Length); ++ ++ /* All data sent, close the connection */ ++ TCP_APP_CLOSECONNECTION(ConnectionState); ++ } ++ else ++ { ++ /* Unknown request, just clear the buffer (drop the packet) */ ++ TCP_APP_CLEAR_BUFFER(Buffer); ++ } ++ } ++ else if (TCP_APP_HAVE_CAPTURED_BUFFER(Buffer)) ++ { ++ uint16_t RemLength = strlen_P(&HTTPPage[PageBlock * HTTP_REPLY_BLOCK_SIZE]); ++ uint16_t Length; ++ ++ /* Determine the length of the loaded block */ ++ Length = MIN(RemLength, HTTP_REPLY_BLOCK_SIZE); ++ ++ /* Copy the next buffer sized block of the page to the packet buffer */ ++ strncpy_P(BufferDataStr, &HTTPPage[PageBlock * HTTP_REPLY_BLOCK_SIZE], Length); ++ ++ /* Send the buffer contents to the host */ ++ TCP_APP_SEND_BUFFER(Buffer, Length); ++ ++ /* Check to see if the entire page has been sent */ ++ if (PageBlock++ == (sizeof(HTTPPage) / HTTP_REPLY_BLOCK_SIZE)) ++ { ++ /* Unlock the buffer so that the host can fill it with future packets */ ++ TCP_APP_RELEASE_BUFFER(Buffer); ++ ++ /* Close the connection to the host */ ++ TCP_APP_CLOSECONNECTION(ConnectionState); ++ } ++ } ++} ++ diff --cc lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/Webserver.h index 000000000,000000000..a73bd3338 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/RNDISEthernet/Lib/Webserver.h @@@ -1,0 -1,0 +1,57 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 Webserver.c. ++ */ ++ ++#ifndef _WEBSERVER_H_ ++#define _WEBSERVER_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/pgmspace.h> ++ ++ #include <LUFA/Version.h> ++ ++ #include "TCP.h" ++ ++ /* Macros: */ ++ /** Maximum size of a HTTP response per transmission */ ++ #define HTTP_REPLY_BLOCK_SIZE 128 ++ ++ /* Function Prototypes: */ ++ void Webserver_Init(void); ++ void Webserver_ApplicationCallback(TCP_ConnectionState_t* const ConnectionState, ++ TCP_ConnectionBuffer_t* const Buffer); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/RNDISEthernet/RNDISEthernet.c index 000000000,000000000..f1dd7a788 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/RNDISEthernet/RNDISEthernet.c @@@ -1,0 -1,0 +1,294 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 RNDISEthernet demo. This file contains the main tasks of the demo and ++ * is responsible for the initial application hardware configuration. ++ */ ++ ++#include "RNDISEthernet.h" ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ /* Webserver Initialization */ ++ TCP_Init(); ++ Webserver_Init(); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ Ethernet_Task(); ++ TCP_Task(); ++ RNDIS_Task(); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#elif (ARCH == ARCH_XMEGA) ++ /* Start the PLL to multiply the 2MHz RC oscillator to 32MHz and switch the CPU core to run from it */ ++ XMEGACLK_StartPLL(CLOCK_SRC_INT_RC2MHZ, 2000000, F_CPU); ++ XMEGACLK_SetCPUClockSource(CLOCK_SRC_PLL); ++ ++ /* Start the 32MHz internal RC oscillator and start the DFLL to increase it to 48MHz using the USB SOF as a reference */ ++ XMEGACLK_StartInternalOscillator(CLOCK_SRC_INT_RC32MHZ); ++ XMEGACLK_StartDFLL(CLOCK_SRC_INT_RC32MHZ, DFLL_REF_INT_USBSOF, F_USB); ++ ++ PMIC.CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm; ++#endif ++ ++ /* Hardware Initialization */ ++ LEDs_Init(); ++ Serial_Init(9600, false); ++ USB_Init(); ++ ++ /* Create a stdio stream for the serial port for stdin and stdout */ ++ Serial_CreateStream(NULL); ++} ++ ++/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and ++ * starts the library USB task to begin the enumeration and USB management process. ++ */ ++void EVENT_USB_Device_Connect(void) ++{ ++ /* Indicate USB enumerating */ ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via ++ * the status LEDs and stops all the relevant tasks. ++ */ ++void EVENT_USB_Device_Disconnect(void) ++{ ++ /* Indicate USB not ready */ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_ConfigurationChanged event. This is fired when the host sets the current configuration ++ * of the USB device after enumeration, and configures the RNDIS device endpoints and starts the relevant tasks. ++ */ ++void EVENT_USB_Device_ConfigurationChanged(void) ++{ ++ bool ConfigSuccess = true; ++ ++ /* Setup RNDIS Data Endpoints */ ++ ConfigSuccess &= Endpoint_ConfigureEndpoint(CDC_TX_EPADDR, EP_TYPE_BULK, CDC_TXRX_EPSIZE, 1); ++ ConfigSuccess &= Endpoint_ConfigureEndpoint(CDC_RX_EPADDR, EP_TYPE_BULK, CDC_TXRX_EPSIZE, 1); ++ ConfigSuccess &= Endpoint_ConfigureEndpoint(CDC_NOTIFICATION_EPADDR, EP_TYPE_INTERRUPT, CDC_NOTIFICATION_EPSIZE, 1); ++ ++ /* Indicate endpoint configuration success or failure */ ++ LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); ++} ++ ++/** Event handler for the USB_ControlRequest event. This is used to catch and process control requests sent to ++ * the device from the USB host before passing along unhandled control requests to the library for processing ++ * internally. ++ */ ++void EVENT_USB_Device_ControlRequest(void) ++{ ++ /* Process RNDIS class commands */ ++ switch (USB_ControlRequest.bRequest) ++ { ++ case RNDIS_REQ_SendEncapsulatedCommand: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) ++ { ++ Endpoint_ClearSETUP(); ++ ++ /* Read in the RNDIS message into the message buffer */ ++ Endpoint_Read_Control_Stream_LE(RNDISMessageBuffer, USB_ControlRequest.wLength); ++ Endpoint_ClearIN(); ++ ++ /* Process the RNDIS message */ ++ ProcessRNDISControlMessage(); ++ } ++ ++ break; ++ case RNDIS_REQ_GetEncapsulatedResponse: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) ++ { ++ /* Check if a response to the last message is ready */ ++ if (!(MessageHeader->MessageLength)) ++ { ++ /* Set the response to a single 0x00 byte to indicate that no response is ready */ ++ RNDISMessageBuffer[0] = 0; ++ MessageHeader->MessageLength = 1; ++ } ++ ++ Endpoint_ClearSETUP(); ++ ++ /* Write the message response data to the endpoint */ ++ Endpoint_Write_Control_Stream_LE(RNDISMessageBuffer, MessageHeader->MessageLength); ++ Endpoint_ClearOUT(); ++ ++ /* Reset the message header once again after transmission */ ++ MessageHeader->MessageLength = 0; ++ } ++ ++ break; ++ } ++} ++ ++/** Task to manage the sending and receiving of encapsulated RNDIS data and notifications. This removes the RNDIS ++ * wrapper from received Ethernet frames and places them in the FrameIN global buffer, or adds the RNDIS wrapper ++ * to a frame in the FrameOUT global before sending the buffer contents to the host. ++ */ ++void RNDIS_Task(void) ++{ ++ /* Select the notification endpoint */ ++ Endpoint_SelectEndpoint(CDC_NOTIFICATION_EPADDR); ++ ++ /* Check if a message response is ready for the host */ ++ if (Endpoint_IsINReady() && ResponseReady) ++ { ++ USB_Request_Header_t Notification = (USB_Request_Header_t) ++ { ++ .bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE), ++ .bRequest = RNDIS_NOTIF_ResponseAvailable, ++ .wValue = 0, ++ .wIndex = 0, ++ .wLength = 0, ++ }; ++ ++ /* Indicate that a message response is ready for the host */ ++ Endpoint_Write_Stream_LE(&Notification, sizeof(Notification), NULL); ++ ++ /* Finalize the stream transfer to send the last packet */ ++ Endpoint_ClearIN(); ++ ++ /* Indicate a response is no longer ready */ ++ ResponseReady = false; ++ } ++ ++ /* Don't process the data endpoints until the system is in the data initialized state, and the buffer is free */ ++ if ((CurrRNDISState == RNDIS_Data_Initialized) && !(MessageHeader->MessageLength)) ++ { ++ /* Create a new packet header for reading/writing */ ++ RNDIS_Packet_Message_t RNDISPacketHeader; ++ ++ /* Select the data OUT endpoint */ ++ Endpoint_SelectEndpoint(CDC_RX_EPADDR); ++ ++ /* Check if the data OUT endpoint contains data, and that the IN buffer is empty */ ++ if (Endpoint_IsOUTReceived() && !(FrameIN.FrameLength)) ++ { ++ /* Read in the packet message header */ ++ Endpoint_Read_Stream_LE(&RNDISPacketHeader, sizeof(RNDIS_Packet_Message_t), NULL); ++ ++ /* Stall the request if the data is too large */ ++ if (RNDISPacketHeader.DataLength > ETHERNET_FRAME_SIZE_MAX) ++ { ++ Endpoint_StallTransaction(); ++ return; ++ } ++ ++ /* Read in the Ethernet frame into the buffer */ ++ Endpoint_Read_Stream_LE(FrameIN.FrameData, RNDISPacketHeader.DataLength, NULL); ++ ++ /* Finalize the stream transfer to send the last packet */ ++ Endpoint_ClearOUT(); ++ ++ /* Store the size of the Ethernet frame */ ++ FrameIN.FrameLength = RNDISPacketHeader.DataLength; ++ } ++ ++ /* Select the data IN endpoint */ ++ Endpoint_SelectEndpoint(CDC_TX_EPADDR); ++ ++ /* Check if the data IN endpoint is ready for more data, and that the IN buffer is full */ ++ if (Endpoint_IsINReady() && FrameOUT.FrameLength) ++ { ++ /* Clear the packet header with all 0s so that the relevant fields can be filled */ ++ memset(&RNDISPacketHeader, 0, sizeof(RNDIS_Packet_Message_t)); ++ ++ /* Construct the required packet header fields in the buffer */ ++ RNDISPacketHeader.MessageType = REMOTE_NDIS_PACKET_MSG; ++ RNDISPacketHeader.MessageLength = (sizeof(RNDIS_Packet_Message_t) + FrameOUT.FrameLength); ++ RNDISPacketHeader.DataOffset = (sizeof(RNDIS_Packet_Message_t) - sizeof(RNDIS_Message_Header_t)); ++ RNDISPacketHeader.DataLength = FrameOUT.FrameLength; ++ ++ /* Send the packet header to the host */ ++ Endpoint_Write_Stream_LE(&RNDISPacketHeader, sizeof(RNDIS_Packet_Message_t), NULL); ++ ++ /* Send the Ethernet frame data to the host */ ++ Endpoint_Write_Stream_LE(FrameOUT.FrameData, RNDISPacketHeader.DataLength, NULL); ++ ++ /* Finalize the stream transfer to send the last packet */ ++ Endpoint_ClearIN(); ++ ++ /* Indicate Ethernet OUT buffer no longer full */ ++ FrameOUT.FrameLength = 0; ++ } ++ } ++} ++ ++/** Ethernet frame processing task. This task checks to see if a frame has been received, and if so hands off the processing ++ * of the frame to the Ethernet processing routines. ++ */ ++void Ethernet_Task(void) ++{ ++ /* Task for Ethernet processing. Incoming ethernet frames are loaded into the FrameIN structure, and ++ outgoing frames should be loaded into the FrameOUT structure. Both structures can only hold a single ++ Ethernet frame at a time, so the FrameInBuffer bool is used to indicate when the buffers contain data. */ ++ ++ /* Device must be connected and configured for the task to run */ ++ if (USB_DeviceState != DEVICE_STATE_Configured) ++ return; ++ ++ /* Check if a frame has been written to the IN frame buffer */ ++ if (FrameIN.FrameLength) ++ { ++ /* Indicate packet processing started */ ++ LEDs_SetAllLEDs(LEDMASK_USB_BUSY); ++ ++ /* Process the ethernet frame - replace this with your own Ethernet handler code as desired */ ++ Ethernet_ProcessPacket(); ++ ++ /* Indicate packet processing complete */ ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++ } ++} ++ diff --cc lib/lufa/Demos/Device/LowLevel/RNDISEthernet/RNDISEthernet.h index 000000000,000000000..89858a58b new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/RNDISEthernet/RNDISEthernet.h @@@ -1,0 -1,0 +1,87 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 RNDISEthernet.c. ++ */ ++ ++#ifndef _RNDISETHERNET_H_ ++#define _RNDISETHERNET_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <string.h> ++ ++ #include "Descriptors.h" ++ ++ #include "Lib/RNDIS.h" ++ #include "Lib/Ethernet.h" ++ #include "Lib/TCP.h" ++ #include "Lib/ARP.h" ++ #include "Lib/Webserver.h" ++ #include "Config/AppConfig.h" ++ ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/Peripheral/Serial.h> ++ #include <LUFA/Platform/Platform.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) ++ ++ /** LED mask for the library LED driver, to indicate that the USB interface is busy. */ ++ #define LEDMASK_USB_BUSY LEDS_LED2 ++ ++ /* Function Prototypes: */ ++ void SetupHardware(void); ++ void RNDIS_Task(void); ++ void Ethernet_Task(void); ++ ++ void EVENT_USB_Device_Connect(void); ++ void EVENT_USB_Device_Disconnect(void); ++ void EVENT_USB_Device_ConfigurationChanged(void); ++ void EVENT_USB_Device_ControlRequest(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/RNDISEthernet/RNDISEthernet.txt index 000000000,000000000..a2c2ac604 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/RNDISEthernet/RNDISEthernet.txt @@@ -1,0 -1,0 +1,146 @@@ ++/** \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 RNDIS Class Ethernet Demo (with Webserver/Telnet) ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * \li Series 6 USB AVRs (AT90USBxxx6) ++ * \li Series AU XMEGA AVRs (ATXMEGAxxxAxU) ++ * \li Series B XMEGA AVRs (ATXMEGAxxxBx) ++ * \li Series C XMEGA AVRs (ATXMEGAxxxCx) ++ * ++ * \section Sec_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> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>Remote NDIS (Microsoft Proprietary CDC Class Networking Standard)</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>Microsoft RNDIS Specification</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Remote Network Driver Interface demonstration application. ++ * This gives a simple reference application for implementing ++ * a CDC RNDIS device acting as a simple network interface for ++ * ethernet packet exchange. RNDIS is a proprietary Microsoft ++ * standard; this demo will only work on Windows 2000 (manually ++ * patched with the Microsoft RNDIS hotfix) and above (with no ++ * manual patches), or on the latest Linux kernels. ++ * ++ * Before running, you will need to install the INF file that ++ * is located in the RNDISEthernet project directory. This will ++ * enable Windows to use its inbuilt RNDIS drivers, negating the ++ * need for special Windows drivers for the device. To install, ++ * right-click the .INF file and choose the Install option. If ++ * Windows 2000 is used, the Microsoft INF file in the hotfix ++ * will need to be altered to use the VID/PID of the demo and ++ * then chosen instead of the LUFA RNDIS INF file when prompted. ++ * ++ * When enumerated, this demo will install as a new network ++ * adapter which ethernet packets can be sent to and received ++ * from. Running on top of the adapter is a very simple TCP/IP ++ * stack with a HTTP webserver and TELNET host which can be ++ * accessed through a web browser at IP address 10.0.0.2:80 or ++ * through a TELNET client at 10.0.0.2:25. This device also supports ++ * ping echos via the ICMP protocol. ++ * ++ * \note The TCP/IP stack in this demo has a number of limitations ++ * and should serve as an example only - it is not fully featured nor ++ * compliant to the TCP/IP specification. For complete projects, it is ++ * recommended that it be replaced with an external open source TCP/IP ++ * stack that is feature complete, such as the uIP stack. ++ * ++ * \section Sec_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> ++ * <th><b>Define Name:</b></th> ++ * <th><b>Location:</b></th> ++ * <th><b>Description:</b></th> ++ * </tr> ++ * <tr> ++ * <td>CLIENT_IP_ADDRESS</td> ++ * <td>AppConfig.h</td> ++ * <td>Configures the IP address given to the client (PC) via the DHCP server.</td> ++ * </tr> ++ * <tr> ++ * <td>SERVER_IP_ADDRESS</td> ++ * <td>AppConfig.h</td> ++ * <td>Configures the IP address of the virtual server.</td> ++ * </tr> ++ * <tr> ++ * <td>ADAPTER_MAC_ADDRESS</td> ++ * <td>AppConfig.h</td> ++ * <td>Configures the MAC address of the RNDIS adapter on the host (PC) side.</td> ++ * </tr> ++ * <tr> ++ * <td>SERVER_MAC_ADDRESS</td> ++ * <td>AppConfig.h</td> ++ * <td>Configures the MAC address of the virtual server on the network.</td> ++ * </tr> ++ * <tr> ++ * <td>NO_DECODE_ETHERNET</td> ++ * <td>AppConfig.h</td> ++ * <td>When defined, received Ethernet headers will not be decoded and printed to the device serial port.</td> ++ * </tr> ++ * <tr> ++ * <td>NO_DECODE_ARP</td> ++ * <td>AppConfig.h</td> ++ * <td>When defined, received ARP headers will not be decoded and printed to the device serial port.</td> ++ * </tr> ++ * <tr> ++ * <td>NO_DECODE_IP</td> ++ * <td>AppConfig.h</td> ++ * <td>When defined, received IP headers will not be decoded and printed to the device serial port.</td> ++ * </tr> ++ * <tr> ++ * <td>NO_DECODE_ICMP</td> ++ * <td>AppConfig.h</td> ++ * <td>When defined, received ICMP headers will not be decoded and printed to the device serial port.</td> ++ * </tr> ++ * <tr> ++ * <td>NO_DECODE_TCP</td> ++ * <td>AppConfig.h</td> ++ * <td>When defined, received TCP headers will not be decoded and printed to the device serial port.</td> ++ * </tr> ++ * <tr> ++ * <td>NO_DECODE_UDP</td> ++ * <td>AppConfig.h</td> ++ * <td>When defined, received UDP headers will not be decoded and printed to the device serial port.</td> ++ * </tr> ++ * <tr> ++ * <td>NO_DECODE_DHCP</td> ++ * <td>AppConfig.h</td> ++ * <td>When defined, received DHCP headers will not be decoded and printed to the device serial port.</td> ++ * </tr> ++ * </table> ++ */ ++ diff --cc lib/lufa/Demos/Device/LowLevel/RNDISEthernet/asf.xml index 000000000,000000000..5bdbf635f new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/RNDISEthernet/asf.xml @@@ -1,0 -1,0 +1,86 @@@ ++<asf xmlversion="1.0"> ++ <project caption="RNDIS Ethernet Device Demo (Low Level APIs)" id="lufa.demos.device.lowlevel.rndis.example.avr8"> ++ <require idref="lufa.demos.device.lowlevel.rndis"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <project caption="RNDIS Ethernet Device Demo (Low Level APIs)" id="lufa.demos.device.lowlevel.rndis.example.xmega"> ++ <require idref="lufa.demos.device.lowlevel.rndis"/> ++ <require idref="lufa.boards.dummy.xmega"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atxmega128a1u"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="32000000UL"/> ++ <build type="define" name="F_USB" value="48000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.device.lowlevel.rndis" caption="RNDIS Ethernet Device Demo (Low Level APIs)"> ++ <info type="description" value="summary"> ++ Microsoft RNDIS Ethernet networking device demo, implementing a basic HTTP webserver. This demo uses the Low Level LUFA APIs to manually implement a USB Class for demonstration purposes without using the simpler in-built LUFA Class Driver APIs. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Low Level APIs"/> ++ <keyword value="USB Device"/> ++ <keyword value="RNDIS Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="RNDISEthernet.txt"/> ++ <build type="distribute" subtype="user-file" value="LUFA RNDIS.inf"/> ++ ++ <build type="c-source" value="RNDISEthernet.c"/> ++ <build type="c-source" value="Descriptors.c"/> ++ <build type="c-source" value="Lib/ARP.c"/> ++ <build type="c-source" value="Lib/DHCP.c"/> ++ <build type="c-source" value="Lib/Ethernet.c"/> ++ <build type="c-source" value="Lib/ICMP.c"/> ++ <build type="c-source" value="Lib/IP.c"/> ++ <build type="c-source" value="Lib/ProtocolDecoders.c"/> ++ <build type="c-source" value="Lib/RNDIS.c"/> ++ <build type="c-source" value="Lib/TCP.c"/> ++ <build type="c-source" value="Lib/UDP.c"/> ++ <build type="c-source" value="Lib/Webserver.c"/> ++ <build type="header-file" value="RNDISEthernet.h"/> ++ <build type="header-file" value="Descriptors.h"/> ++ <build type="header-file" value="Lib/ARP.h"/> ++ <build type="header-file" value="Lib/DHCP.h"/> ++ <build type="header-file" value="Lib/Ethernet.h"/> ++ <build type="header-file" value="Lib/ICMP.h"/> ++ <build type="header-file" value="Lib/IP.h"/> ++ <build type="header-file" value="Lib/ProtocolDecoders.h"/> ++ <build type="header-file" value="Lib/RNDIS.h"/> ++ <build type="header-file" value="Lib/TCP.h"/> ++ <build type="header-file" value="Lib/UDP.h"/> ++ <build type="header-file" value="Lib/Webserver.h"/> ++ <build type="header-file" value="Lib/EthernetProtocols.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="module-config" subtype="required-header-file" value="AppConfig.h"/> ++ <build type="header-file" value="Config/AppConfig.h"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ <require idref="lufa.drivers.peripheral.usart"/> ++ <require idref="lufa.drivers.misc.ansi"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Device/LowLevel/RNDISEthernet/doxyfile index 000000000,000000000..29d07c317 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/RNDISEthernet/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - RNDIS Ethernet 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Device/LowLevel/RNDISEthernet/makefile index 000000000,000000000..82687c1f1 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/RNDISEthernet/makefile @@@ -1,0 -1,0 +1,44 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = RNDISEthernet ++SRC = $(TARGET).c Descriptors.c Lib/Ethernet.c Lib/ProtocolDecoders.c Lib/RNDIS.c Lib/ICMP.c Lib/TCP.c Lib/UDP.c \ ++ Lib/DHCP.c Lib/ARP.c Lib/IP.c Lib/Webserver.c $(LUFA_SRC_USB) $(LUFA_SRC_SERIAL) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Device/LowLevel/VirtualSerial/Config/LUFAConfig.h index 000000000,000000000..c2d3227ac new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/VirtualSerial/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,126 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++ #define USB_DEVICE_ONLY ++// #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #elif (ARCH == ARCH_XMEGA) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_RC32MCLKSRC | USB_OPT_BUSEVENT_PRIHIGH) ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++ #define MAX_ENDPOINT_INDEX 4 ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Device/LowLevel/VirtualSerial/Descriptors.c index 000000000,000000000..5ec042cb0 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/VirtualSerial/Descriptors.c @@@ -1,0 -1,0 +1,245 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special ++ * computer-readable structures which the host requests upon device enumeration, to determine ++ * the device's capabilities and functions. ++ */ ++ ++#include "Descriptors.h" ++ ++ ++/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall ++ * device characteristics, including the supported USB version, control endpoint size and the ++ * number of device configurations. The descriptor is read out by the USB host when the enumeration ++ * process begins. ++ */ ++const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = ++{ ++ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, ++ ++ .USBSpecification = VERSION_BCD(1,1,0), ++ .Class = CDC_CSCP_CDCClass, ++ .SubClass = CDC_CSCP_NoSpecificSubclass, ++ .Protocol = CDC_CSCP_NoSpecificProtocol, ++ ++ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, ++ ++ .VendorID = 0x03EB, ++ .ProductID = 0x2044, ++ .ReleaseNumber = VERSION_BCD(0,0,1), ++ ++ .ManufacturerStrIndex = STRING_ID_Manufacturer, ++ .ProductStrIndex = STRING_ID_Product, ++ .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. ++ */ ++const 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 = 2, ++ ++ .ConfigurationNumber = 1, ++ .ConfigurationStrIndex = NO_DESCRIPTOR, ++ ++ .ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED), ++ ++ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) ++ }, ++ ++ .CDC_CCI_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_CDC_CCI, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 1, ++ ++ .Class = CDC_CSCP_CDCClass, ++ .SubClass = CDC_CSCP_ACMSubclass, ++ .Protocol = CDC_CSCP_ATCommandProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .CDC_Functional_Header = ++ { ++ .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface}, ++ .Subtype = CDC_DSUBTYPE_CSInterface_Header, ++ ++ .CDCSpecification = VERSION_BCD(1,1,0), ++ }, ++ ++ .CDC_Functional_ACM = ++ { ++ .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface}, ++ .Subtype = CDC_DSUBTYPE_CSInterface_ACM, ++ ++ .Capabilities = 0x06, ++ }, ++ ++ .CDC_Functional_Union = ++ { ++ .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface}, ++ .Subtype = CDC_DSUBTYPE_CSInterface_Union, ++ ++ .MasterInterfaceNumber = INTERFACE_ID_CDC_CCI, ++ .SlaveInterfaceNumber = INTERFACE_ID_CDC_DCI, ++ }, ++ ++ .CDC_NotificationEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = CDC_NOTIFICATION_EPADDR, ++ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = CDC_NOTIFICATION_EPSIZE, ++ .PollingIntervalMS = 0xFF ++ }, ++ ++ .CDC_DCI_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_CDC_DCI, ++ .AlternateSetting = 0, ++ ++ .TotalEndpoints = 2, ++ ++ .Class = CDC_CSCP_CDCDataClass, ++ .SubClass = CDC_CSCP_NoDataSubclass, ++ .Protocol = CDC_CSCP_NoDataProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .CDC_DataOutEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = CDC_RX_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = CDC_TXRX_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ }, ++ ++ .CDC_DataInEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = CDC_TX_EPADDR, ++ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = CDC_TXRX_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ } ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_String_t PROGMEM LanguageString = USB_STRING_DESCRIPTOR_ARRAY(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"LUFA CDC 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 uint16_t wIndex, ++ const void** const DescriptorAddress) ++{ ++ const uint8_t DescriptorType = (wValue >> 8); ++ const uint8_t DescriptorNumber = (wValue & 0xFF); ++ ++ const void* Address = NULL; ++ uint16_t Size = NO_DESCRIPTOR; ++ ++ switch (DescriptorType) ++ { ++ case DTYPE_Device: ++ Address = &DeviceDescriptor; ++ Size = sizeof(USB_Descriptor_Device_t); ++ break; ++ case DTYPE_Configuration: ++ Address = &ConfigurationDescriptor; ++ Size = sizeof(USB_Descriptor_Configuration_t); ++ break; ++ case DTYPE_String: ++ switch (DescriptorNumber) ++ { ++ case STRING_ID_Language: ++ Address = &LanguageString; ++ Size = pgm_read_byte(&LanguageString.Header.Size); ++ break; ++ case STRING_ID_Manufacturer: ++ Address = &ManufacturerString; ++ Size = pgm_read_byte(&ManufacturerString.Header.Size); ++ break; ++ case STRING_ID_Product: ++ Address = &ProductString; ++ Size = pgm_read_byte(&ProductString.Header.Size); ++ break; ++ } ++ ++ break; ++ } ++ ++ *DescriptorAddress = Address; ++ return Size; ++} ++ diff --cc lib/lufa/Demos/Device/LowLevel/VirtualSerial/Descriptors.h index 000000000,000000000..c50899ef9 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/VirtualSerial/Descriptors.h @@@ -1,0 -1,0 +1,110 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * Header file for Descriptors.c. ++ */ ++ ++#ifndef _DESCRIPTORS_H_ ++#define _DESCRIPTORS_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include <avr/pgmspace.h> ++ ++ /* Macros: */ ++ /** Endpoint address of the CDC device-to-host notification IN endpoint. */ ++ #define CDC_NOTIFICATION_EPADDR (ENDPOINT_DIR_IN | 2) ++ ++ /** Endpoint address of the CDC device-to-host data IN endpoint. */ ++ #define CDC_TX_EPADDR (ENDPOINT_DIR_IN | 3) ++ ++ /** Endpoint address of the CDC host-to-device data OUT endpoint. */ ++ #define CDC_RX_EPADDR (ENDPOINT_DIR_OUT | 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 ++ ++ /* 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; ++ ++ // CDC Control Interface ++ USB_Descriptor_Interface_t CDC_CCI_Interface; ++ USB_CDC_Descriptor_FunctionalHeader_t CDC_Functional_Header; ++ USB_CDC_Descriptor_FunctionalACM_t CDC_Functional_ACM; ++ USB_CDC_Descriptor_FunctionalUnion_t CDC_Functional_Union; ++ USB_Descriptor_Endpoint_t CDC_NotificationEndpoint; ++ ++ // CDC Data Interface ++ USB_Descriptor_Interface_t CDC_DCI_Interface; ++ USB_Descriptor_Endpoint_t CDC_DataOutEndpoint; ++ USB_Descriptor_Endpoint_t CDC_DataInEndpoint; ++ } USB_Descriptor_Configuration_t; ++ ++ /** Enum for the device interface descriptor IDs within the device. Each interface descriptor ++ * should have a unique ID index associated with it, which can be used to refer to the ++ * interface from other descriptors. ++ */ ++ enum InterfaceDescriptors_t ++ { ++ INTERFACE_ID_CDC_CCI = 0, /**< CDC CCI interface descriptor ID */ ++ INTERFACE_ID_CDC_DCI = 1, /**< CDC DCI interface descriptor ID */ ++ }; ++ ++ /** Enum for the device string descriptor IDs within the device. Each string descriptor should ++ * have a unique ID index associated with it, which can be used to refer to the string from ++ * other descriptors. ++ */ ++ enum StringDescriptors_t ++ { ++ STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */ ++ STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */ ++ STRING_ID_Product = 2, /**< Product string ID */ ++ }; ++ ++ /* Function Prototypes: */ ++ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ++ const uint16_t wIndex, ++ const void** const DescriptorAddress) ++ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/VirtualSerial/LUFA VirtualSerial.inf index 000000000,000000000..21d2d12b6 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/VirtualSerial/LUFA VirtualSerial.inf @@@ -1,0 -1,0 +1,66 @@@ ++;************************************************************ ++; Windows USB CDC ACM Setup File ++; Copyright (c) 2000 Microsoft Corporation ++;************************************************************ ++ ++[DefaultInstall] ++CopyINF="LUFA VirtualSerial.inf" ++ ++[Version] ++Signature="$Windows NT$" ++Class=Ports ++ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} ++Provider=%MFGNAME% ++DriverVer=7/1/2012,10.0.0.0 ++ ++[Manufacturer] ++%MFGNAME%=DeviceList, NTx86, NTamd64, NTia64 ++ ++[SourceDisksNames] ++ ++[SourceDisksFiles] ++ ++[DestinationDirs] ++DefaultDestDir=12 ++ ++[DriverInstall] ++Include=mdmcpq.inf ++CopyFiles=FakeModemCopyFileSection ++AddReg=DriverInstall.AddReg ++ ++[DriverInstall.Services] ++Include=mdmcpq.inf ++AddService=usbser, 0x00000002, LowerFilter_Service_Inst ++ ++[DriverInstall.AddReg] ++HKR,,EnumPropPages32,,"msports.dll,SerialPortPropPageProvider" ++ ++;------------------------------------------------------------------------------ ++; 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. ++;------------------------------------------------------------------------------ ++[DeviceList] ++%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_2044 ++ ++[DeviceList.NTx86] ++%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_2044 ++ ++[DeviceList.NTamd64] ++%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_2044 ++ ++[DeviceList.NTia64] ++%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_2044 ++ ++;------------------------------------------------------------------------------ ++; String Definitions ++;------------------------------------------------------------------------------ ++;Modify these strings to customize your device ++;------------------------------------------------------------------------------ ++[Strings] ++MFGNAME="http://www.lufa-lib.org" ++DESCRIPTION="LUFA CDC-ACM Virtual Serial Port" diff --cc lib/lufa/Demos/Device/LowLevel/VirtualSerial/VirtualSerial.c index 000000000,000000000..6f83a84af new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/VirtualSerial/VirtualSerial.c @@@ -1,0 -1,0 +1,243 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 VirtualSerial demo. This file contains the main tasks of the demo and ++ * is responsible for the initial application hardware configuration. ++ */ ++ ++#include "VirtualSerial.h" ++ ++/** Contains the current baud rate and other settings of the virtual serial port. While this demo does not use ++ * the physical USART and thus does not use these settings, they must still be retained and returned to the host ++ * upon request or the host will assume the device is non-functional. ++ * ++ * These values are set by the host via a class-specific request, however they are not required to be used accurately. ++ * It is possible to completely ignore these value or use other settings as the host is completely unaware of the physical ++ * serial link characteristics and instead sends and receives data in endpoint streams. ++ */ ++static CDC_LineEncoding_t LineEncoding = { .BaudRateBPS = 0, ++ .CharFormat = CDC_LINEENCODING_OneStopBit, ++ .ParityType = CDC_PARITY_None, ++ .DataBits = 8 }; ++ ++ ++/** 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); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ CDC_Task(); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#elif (ARCH == ARCH_XMEGA) ++ /* Start the PLL to multiply the 2MHz RC oscillator to 32MHz and switch the CPU core to run from it */ ++ XMEGACLK_StartPLL(CLOCK_SRC_INT_RC2MHZ, 2000000, F_CPU); ++ XMEGACLK_SetCPUClockSource(CLOCK_SRC_PLL); ++ ++ /* Start the 32MHz internal RC oscillator and start the DFLL to increase it to 48MHz using the USB SOF as a reference */ ++ XMEGACLK_StartInternalOscillator(CLOCK_SRC_INT_RC32MHZ); ++ XMEGACLK_StartDFLL(CLOCK_SRC_INT_RC32MHZ, DFLL_REF_INT_USBSOF, F_USB); ++ ++ PMIC.CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm; ++#endif ++ ++ /* Hardware Initialization */ ++ Joystick_Init(); ++ LEDs_Init(); ++ USB_Init(); ++} ++ ++/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and ++ * starts the library USB task to begin the enumeration and USB management process. ++ */ ++void EVENT_USB_Device_Connect(void) ++{ ++ /* Indicate USB enumerating */ ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via ++ * the status LEDs and stops the USB management and CDC management tasks. ++ */ ++void EVENT_USB_Device_Disconnect(void) ++{ ++ /* Indicate USB not ready */ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration ++ * of the USB device after enumeration - the device endpoints are configured and the CDC management task started. ++ */ ++void EVENT_USB_Device_ConfigurationChanged(void) ++{ ++ bool ConfigSuccess = true; ++ ++ /* Setup CDC Data Endpoints */ ++ ConfigSuccess &= Endpoint_ConfigureEndpoint(CDC_NOTIFICATION_EPADDR, EP_TYPE_INTERRUPT, CDC_NOTIFICATION_EPSIZE, 1); ++ ConfigSuccess &= Endpoint_ConfigureEndpoint(CDC_TX_EPADDR, EP_TYPE_BULK, CDC_TXRX_EPSIZE, 1); ++ ConfigSuccess &= Endpoint_ConfigureEndpoint(CDC_RX_EPADDR, EP_TYPE_BULK, CDC_TXRX_EPSIZE, 1); ++ ++ /* Reset line encoding baud rate so that the host knows to send new values */ ++ LineEncoding.BaudRateBPS = 0; ++ ++ /* Indicate endpoint configuration success or failure */ ++ LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); ++} ++ ++/** Event handler for the USB_ControlRequest event. This is used to catch and process control requests sent to ++ * the device from the USB host before passing along unhandled control requests to the library for processing ++ * internally. ++ */ ++void EVENT_USB_Device_ControlRequest(void) ++{ ++ /* Process CDC specific control requests */ ++ switch (USB_ControlRequest.bRequest) ++ { ++ case CDC_REQ_GetLineEncoding: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) ++ { ++ Endpoint_ClearSETUP(); ++ ++ /* Write the line coding data to the control endpoint */ ++ Endpoint_Write_Control_Stream_LE(&LineEncoding, sizeof(CDC_LineEncoding_t)); ++ Endpoint_ClearOUT(); ++ } ++ ++ break; ++ case CDC_REQ_SetLineEncoding: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) ++ { ++ Endpoint_ClearSETUP(); ++ ++ /* Read the line coding data in from the host into the global struct */ ++ Endpoint_Read_Control_Stream_LE(&LineEncoding, sizeof(CDC_LineEncoding_t)); ++ Endpoint_ClearIN(); ++ } ++ ++ break; ++ case CDC_REQ_SetControlLineState: ++ if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) ++ { ++ Endpoint_ClearSETUP(); ++ Endpoint_ClearStatusStage(); ++ ++ /* NOTE: Here you can read in the line state mask from the host, to get the current state of the output handshake ++ lines. The mask is read in from the wValue parameter in USB_ControlRequest, and can be masked against the ++ CONTROL_LINE_OUT_* masks to determine the RTS and DTR line states using the following code: ++ */ ++ } ++ ++ break; ++ } ++} ++ ++/** Function to manage CDC data transmission and reception to and from the host. */ ++void CDC_Task(void) ++{ ++ char* ReportString = NULL; ++ uint8_t JoyStatus_LCL = Joystick_GetStatus(); ++ static bool ActionSent = false; ++ ++ /* Device must be connected and configured for the task to run */ ++ if (USB_DeviceState != DEVICE_STATE_Configured) ++ return; ++ ++ /* Determine if a joystick action has occurred */ ++ 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; ++ ++ /* Flag management - Only allow one string to be sent per action */ ++ if ((ReportString != NULL) && (ActionSent == false) && LineEncoding.BaudRateBPS) ++ { ++ ActionSent = true; ++ ++ /* Select the Serial Tx Endpoint */ ++ Endpoint_SelectEndpoint(CDC_TX_EPADDR); ++ ++ /* Write the String to the Endpoint */ ++ Endpoint_Write_Stream_LE(ReportString, strlen(ReportString), NULL); ++ ++ /* Remember if the packet to send completely fills the endpoint */ ++ bool IsFull = (Endpoint_BytesInEndpoint() == CDC_TXRX_EPSIZE); ++ ++ /* Finalize the stream transfer to send the last packet */ ++ Endpoint_ClearIN(); ++ ++ /* If the last packet filled the endpoint, send an empty packet to release the buffer on ++ * the receiver (otherwise all data will be cached until a non-full packet is received) */ ++ if (IsFull) ++ { ++ /* Wait until the endpoint is ready for another packet */ ++ Endpoint_WaitUntilReady(); ++ ++ /* Send an empty packet to ensure that the host does not buffer data sent to it */ ++ Endpoint_ClearIN(); ++ } ++ } ++ ++ /* Select the Serial Rx Endpoint */ ++ Endpoint_SelectEndpoint(CDC_RX_EPADDR); ++ ++ /* Throw away any received data from the host */ ++ if (Endpoint_IsOUTReceived()) ++ Endpoint_ClearOUT(); ++} ++ diff --cc lib/lufa/Demos/Device/LowLevel/VirtualSerial/VirtualSerial.h index 000000000,000000000..dab3d56d6 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/VirtualSerial/VirtualSerial.h @@@ -1,0 -1,0 +1,76 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 VirtualSerial.c. ++ */ ++ ++#ifndef _VIRTUALSERIAL_H_ ++#define _VIRTUALSERIAL_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <string.h> ++ ++ #include "Descriptors.h" ++ ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Drivers/Board/Joystick.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Platform/Platform.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 CDC_Task(void); ++ ++ void EVENT_USB_Device_Connect(void); ++ void EVENT_USB_Device_Disconnect(void); ++ void EVENT_USB_Device_ConfigurationChanged(void); ++ void EVENT_USB_Device_ControlRequest(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Device/LowLevel/VirtualSerial/VirtualSerial.txt index 000000000,000000000..c802d9950 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/VirtualSerial/VirtualSerial.txt @@@ -1,0 -1,0 +1,76 @@@ ++/** \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 Communications Device Class (Virtual Serial Port) Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * \li Series 6 USB AVRs (AT90USBxxx6) ++ * \li Series 4 USB AVRs (ATMEGAxxU4) ++ * \li Series 2 USB AVRs (AT90USBxx2, ATMEGAxxU2) ++ * \li Series AU XMEGA AVRs (ATXMEGAxxxAxU) ++ * \li Series B XMEGA AVRs (ATXMEGAxxxBx) ++ * \li Series C XMEGA AVRs (ATXMEGAxxxCx) ++ * ++ * \section Sec_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> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>Abstract Control Model (ACM)</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF CDC Class Standard</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Communications Device Class demonstration application. ++ * This gives a simple reference application for implementing ++ * a CDC device acting as a virtual serial port. Joystick ++ * actions are transmitted to the host as strings. 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 Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Device/LowLevel/VirtualSerial/asf.xml index 000000000,000000000..1eb328b51 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/VirtualSerial/asf.xml @@@ -1,0 -1,0 +1,63 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Virtual Serial CDC Device Demo (Low Level APIs)" id="lufa.demos.device.lowlevel.cdc.example.avr8"> ++ <require idref="lufa.demos.device.lowlevel.cdc"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <project caption="Virtual Serial CDC Device Demo (Low Level APIs)" id="lufa.demos.device.lowlevel.cdc.example.xmega"> ++ <require idref="lufa.demos.device.lowlevel.cdc"/> ++ <require idref="lufa.boards.dummy.xmega"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="atxmega128a1u"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="32000000UL"/> ++ <build type="define" name="F_USB" value="48000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.device.lowlevel.cdc" caption="Virtual Serial CDC Device Demo (Low Level APIs)"> ++ <info type="description" value="summary"> ++ Virtual Serial device demo, implementing a virtual serial channel between the host PC and the device. This demo uses the Low Level LUFA APIs to manually implement a USB Class for demonstration purposes without using the simpler in-built LUFA Class Driver APIs. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Low Level APIs"/> ++ <keyword value="USB Device"/> ++ <keyword value="CDC Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="VirtualSerial.txt"/> ++ <build type="distribute" subtype="user-file" value="LUFA VirtualSerial.inf"/> ++ ++ <build type="c-source" value="VirtualSerial.c"/> ++ <build type="c-source" value="Descriptors.c"/> ++ <build type="header-file" value="VirtualSerial.h"/> ++ <build type="header-file" value="Descriptors.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ <require idref="lufa.drivers.board.buttons"/> ++ <require idref="lufa.drivers.board.joystick"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Device/LowLevel/VirtualSerial/doxyfile index 000000000,000000000..aa21df582 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/VirtualSerial/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Virtual Serial 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Device/LowLevel/VirtualSerial/makefile index 000000000,000000000..b33840cae new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/VirtualSerial/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = VirtualSerial ++SRC = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Device/LowLevel/makefile index 000000000,000000000..a713c9d4c new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/LowLevel/makefile @@@ -1,0 -1,0 +1,46 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++ ++# Makefile to build all the LUFA Device Demos. Call with "make all" to ++# rebuild all Device demos. ++ ++# Projects are pre-cleaned before each one is built, to ensure any ++# custom LUFA library build options are reflected in the compiled ++# code. ++ ++PROJECT_DIRECTORIES := $(shell ls -d */) ++ ++# This makefile is potentially infinitely recursive if something really bad ++# happens when determining the set of project directories - hard-abort if ++# more than 10 levels deep to avoid angry emails. ++ifeq ($(MAKELEVEL), 10) ++ $(error EMERGENCY ABORT: INFINITE RECURSION DETECTED) ++endif ++ ++# Need to special-case building without a per-project object directory ++ifeq ($(OBJDIR),) ++ # If no target specified, force "clean all" and disallow parallel build ++ ifeq ($(MAKECMDGOALS),) ++ MAKECMDGOALS := clean all ++ .NOTPARALLEL: ++ endif ++ ++ # If one of the targets is to build, force "clean" beforehand and disallow parallel build ++ ifneq ($(findstring all, $(MAKECMDGOALS)),) ++ MAKECMDGOALS := clean $(MAKECMDGOALS) ++ .NOTPARALLEL: ++ endif ++endif ++ ++%: $(PROJECT_DIRECTORIES) ++ @echo . > /dev/null ++ ++$(PROJECT_DIRECTORIES): ++ @$(MAKE) -C $@ $(MAKECMDGOALS) ++ ++.PHONY: $(PROJECT_DIRECTORIES) diff --cc lib/lufa/Demos/Device/makefile index 000000000,000000000..abeb3f4a8 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Device/makefile @@@ -1,0 -1,0 +1,21 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++ ++# Makefile to build all the LUFA Class Driver and Low Level Demos. Call with ++# "make all" to rebuild all demos of both types. ++ ++# Projects are pre-cleaned before each one is built, to ensure any ++# custom LUFA library build options are reflected in the compiled ++# code. ++ ++all: ++ ++%: ++ $(MAKE) -C ClassDriver $@ ++ $(MAKE) -C LowLevel $@ ++ diff --cc lib/lufa/Demos/DualRole/ClassDriver/MouseHostDevice/Config/LUFAConfig.h index 000000000,000000000..0a8074e71 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/DualRole/ClassDriver/MouseHostDevice/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++// #define USB_DEVICE_ONLY ++// #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++ #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++ #define FIXED_CONTROL_ENDPOINT_SIZE 8 ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++ #define FIXED_NUM_CONFIGURATIONS 1 ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/DualRole/ClassDriver/MouseHostDevice/Descriptors.c index 000000000,000000000..9889422a5 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/DualRole/ClassDriver/MouseHostDevice/Descriptors.c @@@ -1,0 -1,0 +1,221 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * USB Device Descriptors, for library use when in USB device mode. Descriptors are special ++ * computer-readable structures which the host requests upon device enumeration, to determine ++ * the device's capabilities and functions. ++ */ ++ ++#include "Descriptors.h" ++ ++/** HID class report descriptor. This is a special descriptor constructed with values from the ++ * USBIF HID class specification to describe the reports and capabilities of the HID device. This ++ * descriptor is parsed by the host and its contents used to determine what data (and in what encoding) ++ * the device will send, and what it may be sent back from the host. Refer to the HID specification for ++ * more details on HID report descriptors. ++ */ ++const USB_Descriptor_HIDReport_Datatype_t PROGMEM MouseReport[] = ++{ ++ /* Use the HID class driver's standard Mouse report. ++ * Min X/Y Axis values: -1 ++ * Max X/Y Axis values: 1 ++ * Min physical X/Y Axis values (used to determine resolution): -1 ++ * Max physical X/Y Axis values (used to determine resolution): 1 ++ * Buttons: 3 ++ * Absolute screen coordinates: false ++ */ ++ HID_DESCRIPTOR_MOUSE(-1, 1, -1, 1, 3, false) ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = ++{ ++ .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, ++ ++ .USBSpecification = VERSION_BCD(1,1,0), ++ .Class = USB_CSCP_NoDeviceClass, ++ .SubClass = USB_CSCP_NoDeviceSubclass, ++ .Protocol = USB_CSCP_NoDeviceProtocol, ++ ++ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, ++ ++ .VendorID = 0x03EB, ++ .ProductID = 0x2041, ++ .ReleaseNumber = 0x0000, ++ ++ .ManufacturerStrIndex = STRING_ID_Manufacturer, ++ .ProductStrIndex = STRING_ID_Product, ++ .SerialNumStrIndex = NO_DESCRIPTOR, ++ ++ .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. ++ */ ++const 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 = 1, ++ ++ .ConfigurationNumber = 1, ++ .ConfigurationStrIndex = NO_DESCRIPTOR, ++ ++ .ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED), ++ ++ .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) ++ }, ++ ++ .HID_Interface = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, ++ ++ .InterfaceNumber = INTERFACE_ID_Mouse, ++ .AlternateSetting = 0x00, ++ ++ .TotalEndpoints = 1, ++ ++ .Class = HID_CSCP_HIDClass, ++ .SubClass = HID_CSCP_BootSubclass, ++ .Protocol = HID_CSCP_MouseBootProtocol, ++ ++ .InterfaceStrIndex = NO_DESCRIPTOR ++ }, ++ ++ .HID_MouseHID = ++ { ++ .Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID}, ++ ++ .HIDSpec = VERSION_BCD(1,1,1), ++ .CountryCode = 0x00, ++ .TotalReportDescriptors = 1, ++ .HIDReportType = HID_DTYPE_Report, ++ .HIDReportLength = sizeof(MouseReport) ++ }, ++ ++ .HID_ReportINEndpoint = ++ { ++ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, ++ ++ .EndpointAddress = MOUSE_EPADDR, ++ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), ++ .EndpointSize = MOUSE_EPSIZE, ++ .PollingIntervalMS = 0x05 ++ } ++}; ++ ++/** 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. ++ */ ++const USB_Descriptor_String_t PROGMEM LanguageString = USB_STRING_DESCRIPTOR_ARRAY(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR(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. ++ */ ++const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"LUFA 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 uint16_t wIndex, ++ const void** const DescriptorAddress) ++{ ++ const uint8_t DescriptorType = (wValue >> 8); ++ const uint8_t DescriptorNumber = (wValue & 0xFF); ++ ++ const void* Address = NULL; ++ uint16_t Size = NO_DESCRIPTOR; ++ ++ switch (DescriptorType) ++ { ++ case DTYPE_Device: ++ Address = &DeviceDescriptor; ++ Size = sizeof(USB_Descriptor_Device_t); ++ break; ++ case DTYPE_Configuration: ++ Address = &ConfigurationDescriptor; ++ Size = sizeof(USB_Descriptor_Configuration_t); ++ break; ++ case DTYPE_String: ++ switch (DescriptorNumber) ++ { ++ case STRING_ID_Language: ++ Address = &LanguageString; ++ Size = pgm_read_byte(&LanguageString.Header.Size); ++ break; ++ case STRING_ID_Manufacturer: ++ Address = &ManufacturerString; ++ Size = pgm_read_byte(&ManufacturerString.Header.Size); ++ break; ++ case STRING_ID_Product: ++ Address = &ProductString; ++ Size = pgm_read_byte(&ProductString.Header.Size); ++ break; ++ } ++ ++ break; ++ case HID_DTYPE_HID: ++ Address = &ConfigurationDescriptor.HID_MouseHID; ++ Size = sizeof(USB_HID_Descriptor_HID_t); ++ break; ++ case HID_DTYPE_Report: ++ Address = &MouseReport; ++ Size = sizeof(MouseReport); ++ break; ++ } ++ ++ *DescriptorAddress = Address; ++ return Size; ++} ++ diff --cc lib/lufa/Demos/DualRole/ClassDriver/MouseHostDevice/Descriptors.h index 000000000,000000000..d5fdd3c88 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/DualRole/ClassDriver/MouseHostDevice/Descriptors.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in an action of contract, negligence or other tortious action, ++ arising out of or in connection with the use or performance of ++ this software. ++*/ ++ ++/** \file ++ * ++ * Header file for Descriptors.c. ++ */ ++ ++#ifndef _DESCRIPTORS_H_ ++#define _DESCRIPTORS_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include <avr/pgmspace.h> ++ ++ /* 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; ++ ++ // Mouse HID Interface ++ USB_Descriptor_Interface_t HID_Interface; ++ USB_HID_Descriptor_HID_t HID_MouseHID; ++ USB_Descriptor_Endpoint_t HID_ReportINEndpoint; ++ } USB_Descriptor_Configuration_t; ++ ++ /** Enum for the device interface descriptor IDs within the device. Each interface descriptor ++ * should have a unique ID index associated with it, which can be used to refer to the ++ * interface from other descriptors. ++ */ ++ enum InterfaceDescriptors_t ++ { ++ INTERFACE_ID_Mouse = 0, /**< Mouse interface descriptor ID (must be zero) */ ++ }; ++ ++ /** Enum for the device string descriptor IDs within the device. Each string descriptor should ++ * have a unique ID index associated with it, which can be used to refer to the string from ++ * other descriptors. ++ */ ++ enum StringDescriptors_t ++ { ++ STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */ ++ STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */ ++ STRING_ID_Product = 2, /**< Product string ID */ ++ }; ++ ++ /* Macros: */ ++ /** Endpoint address of the Mouse HID reporting IN endpoint. */ ++ #define MOUSE_EPADDR (ENDPOINT_DIR_IN | 1) ++ ++ /** Size in bytes of the Mouse HID reporting IN endpoint. */ ++ #define MOUSE_EPSIZE 8 ++ ++ /* Function Prototypes: */ ++ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ++ const uint16_t wIndex, ++ const void** const DescriptorAddress) ++ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); ++ ++#endif ++ diff --cc lib/lufa/Demos/DualRole/ClassDriver/MouseHostDevice/DeviceFunctions.c index 000000000,000000000..3598462be new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/DualRole/ClassDriver/MouseHostDevice/DeviceFunctions.c @@@ -1,0 -1,0 +1,155 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * Device Mode USB Mouse functionality for the MouseHostDevice demo. This file contains the Device mode ++ * USB Mouse related code of the demo and is responsible for all the Device mode Mouse functionality. ++ */ ++ ++#include "DeviceFunctions.h" ++ ++/** Buffer to hold the previously generated Mouse Device HID report, for comparison purposes inside the HID class driver. */ ++static 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_Device_Interface = ++ { ++ .Config = ++ { ++ .InterfaceNumber = INTERFACE_ID_Mouse, ++ .ReportINEndpoint = ++ { ++ .Address = MOUSE_EPADDR, ++ .Size = MOUSE_EPSIZE, ++ .Banks = 1, ++ }, ++ .PrevReportINBuffer = PrevMouseHIDReportBuffer, ++ .PrevReportINBufferSize = sizeof(PrevMouseHIDReportBuffer), ++ }, ++ }; ++ ++ ++/** Event handler for the library USB WakeUp event. */ ++void EVENT_USB_Device_Connect(void) ++{ ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the library USB Suspend 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 (!(HID_Device_ConfigureEndpoints(&Mouse_HID_Device_Interface))) ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ ++ USB_Device_EnableSOFEvents(); ++} ++ ++/** Event handler for the library USB Control Request reception event. */ ++void EVENT_USB_Device_ControlRequest(void) ++{ ++ HID_Device_ProcessControlRequest(&Mouse_HID_Device_Interface); ++} ++ ++/** Event handler for the USB device Start Of Frame event. */ ++void EVENT_USB_Device_StartOfFrame(void) ++{ ++ HID_Device_MillisecondElapsed(&Mouse_HID_Device_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[in] ReportType Type of the report to create, either HID_REPORT_ITEM_In or HID_REPORT_ITEM_Feature ++ * \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 \c true to force the sending of the report, \c 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, ++ const uint8_t ReportType, ++ void* ReportData, ++ uint16_t* const 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] ReportType The type of report that the host has sent, either HID_REPORT_ITEM_Out or HID_REPORT_ITEM_Feature ++ * \param[in] ReportData Pointer to a buffer where the received 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 uint8_t ReportType, ++ 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 ++} ++ diff --cc lib/lufa/Demos/DualRole/ClassDriver/MouseHostDevice/DeviceFunctions.h index 000000000,000000000..36ad50acf new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/DualRole/ClassDriver/MouseHostDevice/DeviceFunctions.h @@@ -1,0 -1,0 +1,64 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 DeviceFunctions.c. ++ */ ++ ++#ifndef _MOUSE_DEVICE_FUNCTIONS_H_ ++#define _MOUSE_DEVICE_FUNCTIONS_H_ ++ ++ /* Includes: */ ++ #include "MouseHostDevice.h" ++ ++ /* External Variables: */ ++ extern USB_ClassInfo_HID_Device_t Mouse_HID_Device_Interface; ++ ++ /* Function Prototypes: */ ++ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, ++ uint8_t* const ReportID, ++ const uint8_t ReportType, ++ void* ReportData, ++ uint16_t* const ReportSize); ++ void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, ++ const uint8_t ReportID, ++ const uint8_t ReportType, ++ const void* ReportData, ++ const uint16_t ReportSize); ++ ++ void EVENT_USB_Device_Connect(void); ++ void EVENT_USB_Device_Disconnect(void); ++ void EVENT_USB_Device_ConfigurationChanged(void); ++ void EVENT_USB_Device_ControlRequest(void); ++ void EVENT_USB_Device_StartOfFrame(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/DualRole/ClassDriver/MouseHostDevice/HostFunctions.c index 000000000,000000000..8e602add1 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/DualRole/ClassDriver/MouseHostDevice/HostFunctions.c @@@ -1,0 -1,0 +1,184 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * Host Mode USB Mouse functionality for the MouseHostDevice demo. This file contains the Host mode ++ * USB Mouse related code of the demo and is responsible for all the Host mode Mouse functionality. ++ */ ++ ++#include "HostFunctions.h" ++ ++/** 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_Host_t Mouse_HID_Host_Interface = ++ { ++ .Config = ++ { ++ .DataINPipe = ++ { ++ .Address = (PIPE_DIR_IN | 1), ++ .Banks = 1, ++ }, ++ .DataINPipe = ++ { ++ .Address = (PIPE_DIR_OUT | 2), ++ .Banks = 1, ++ }, ++ .HIDInterfaceProtocol = HID_CSCP_MouseBootProtocol, ++ }, ++ }; ++ ++ ++/** Event handler for the USB_DeviceAttached event. This indicates that a device has been attached to the host, and ++ * starts the library USB task to begin the enumeration and USB management process. ++ */ ++void EVENT_USB_Host_DeviceAttached(void) ++{ ++ puts_P(PSTR("Device Attached.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the USB_DeviceUnattached event. This indicates that a device has been removed from the host, and ++ * stops the library USB task management process. ++ */ ++void EVENT_USB_Host_DeviceUnattached(void) ++{ ++ puts_P(PSTR("\r\nDevice Unattached.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_DeviceEnumerationComplete event. This indicates that a device has been successfully ++ * enumerated by the host and is now ready to be used by the application. ++ */ ++void EVENT_USB_Host_DeviceEnumerationComplete(void) ++{ ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++ ++ uint16_t ConfigDescriptorSize; ++ uint8_t ConfigDescriptorData[512]; ++ ++ if (USB_Host_GetDeviceConfigDescriptor(1, &ConfigDescriptorSize, ConfigDescriptorData, ++ sizeof(ConfigDescriptorData)) != HOST_GETCONFIG_Successful) ++ { ++ printf("Error Retrieving Configuration Descriptor.\r\n"); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (HID_Host_ConfigurePipes(&Mouse_HID_Host_Interface, ++ ConfigDescriptorSize, ConfigDescriptorData) != HID_ENUMERROR_NoError) ++ { ++ printf("Attached Device Not a Valid Mouse.\r\n"); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (USB_Host_SetDeviceConfiguration(1) != HOST_SENDCONTROL_Successful) ++ { ++ printf("Error Setting Device Configuration.\r\n"); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (HID_Host_SetBootProtocol(&Mouse_HID_Host_Interface) != HOST_SENDCONTROL_Successful) ++ { ++ printf("Could not Set Boot Protocol Mode.\r\n"); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ printf("Mouse Enumerated.\r\n"); ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++} ++ ++/** Event handler for the USB_HostError event. This indicates that a hardware error occurred while in host mode. */ ++void EVENT_USB_Host_HostError(const uint8_t ErrorCode) ++{ ++ USB_Disable(); ++ ++ printf_P(PSTR(ESC_FG_RED "Host Mode Error\r\n" ++ " -- Error Code %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ for(;;); ++} ++ ++/** Event handler for the USB_DeviceEnumerationFailed event. This indicates that a problem occurred while ++ * enumerating an attached USB device. ++ */ ++void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode) ++{ ++ printf_P(PSTR(ESC_FG_RED "Dev Enum Error\r\n" ++ " -- Error Code %d\r\n" ++ " -- Sub Error Code %d\r\n" ++ " -- In State %d\r\n" ESC_FG_WHITE), ErrorCode, SubErrorCode, USB_HostState); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++} ++ ++/** Host USB management task. This task handles the control of USB Mice while in USB Host mode, ++ * setting up the appropriate data pipes and processing reports from the attached device. ++ */ ++void MouseHost_Task(void) ++{ ++ if (USB_HostState != HOST_STATE_Configured) ++ return; ++ ++ if (HID_Host_IsReportReceived(&Mouse_HID_Host_Interface)) ++ { ++ uint8_t LEDMask = LEDS_NO_LEDS; ++ ++ USB_MouseReport_Data_t MouseReport; ++ HID_Host_ReceiveReport(&Mouse_HID_Host_Interface, &MouseReport); ++ ++ printf_P(PSTR("dX:%2d dY:%2d Button:%d\r\n"), MouseReport.X, ++ MouseReport.Y, ++ MouseReport.Button); ++ if (MouseReport.X > 0) ++ LEDMask |= LEDS_LED1; ++ else if (MouseReport.X < 0) ++ LEDMask |= LEDS_LED2; ++ ++ if (MouseReport.Y > 0) ++ LEDMask |= LEDS_LED3; ++ else if (MouseReport.Y < 0) ++ LEDMask |= LEDS_LED4; ++ ++ if (MouseReport.Button) ++ LEDMask = LEDS_ALL_LEDS; ++ ++ LEDs_SetAllLEDs(LEDMask); ++ } ++} ++ diff --cc lib/lufa/Demos/DualRole/ClassDriver/MouseHostDevice/HostFunctions.h index 000000000,000000000..02d4e7247 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/DualRole/ClassDriver/MouseHostDevice/HostFunctions.h @@@ -1,0 -1,0 +1,56 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 HostFunctions.c. ++ */ ++ ++#ifndef _MOUSE_HOST_FUNCTIONS_H_ ++#define _MOUSE_HOST_FUNCTIONS_H_ ++ ++ /* Includes: */ ++ #include "MouseHostDevice.h" ++ ++ /* External Variables: */ ++ extern USB_ClassInfo_HID_Host_t Mouse_HID_Host_Interface; ++ ++ /* Function Prototypes: */ ++ void MouseHost_Task(void); ++ ++ void EVENT_USB_Host_HostError(const uint8_t ErrorCode); ++ void EVENT_USB_Host_DeviceAttached(void); ++ void EVENT_USB_Host_DeviceUnattached(void); ++ void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode); ++ void EVENT_USB_Host_DeviceEnumerationComplete(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/DualRole/ClassDriver/MouseHostDevice/MouseHostDevice.c index 000000000,000000000..fc6421ac0 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/DualRole/ClassDriver/MouseHostDevice/MouseHostDevice.c @@@ -1,0 -1,0 +1,99 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 MouseHostDevice demo. This file contains the main tasks of ++ * the demo and is responsible for the overall control flow of the demo. ++ */ ++ ++#include "MouseHostDevice.h" ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ puts_P(PSTR(ESC_FG_CYAN "Mouse Host/Device Demo running.\r\n" ESC_FG_WHITE)); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ /* Determine which USB mode we are currently in */ ++ if (USB_CurrentMode == USB_MODE_Host) ++ { ++ MouseHost_Task(); ++ HID_Host_USBTask(&Mouse_HID_Host_Interface); ++ } ++ else ++ { ++ HID_Device_USBTask(&Mouse_HID_Device_Interface); ++ } ++ ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#endif ++ ++ /* Hardware Initialization */ ++ Serial_Init(9600, false); ++ LEDs_Init(); ++ Joystick_Init(); ++ Buttons_Init(); ++ USB_Init(USB_MODE_UID); ++ ++ /* Create a stdio stream for the serial port for stdin and stdout */ ++ Serial_CreateStream(NULL); ++} ++ ++/** Event handler for the library USB mode change event. */ ++void EVENT_USB_UIDChange(void) ++{ ++ printf_P(PSTR(ESC_FG_YELLOW "UID Change to %S mode\r\n" ESC_FG_WHITE), ++ (USB_CurrentMode == USB_MODE_Device) ? PSTR("Device") : PSTR("Host")); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ diff --cc lib/lufa/Demos/DualRole/ClassDriver/MouseHostDevice/MouseHostDevice.h index 000000000,000000000..4b6fe4f6d new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/DualRole/ClassDriver/MouseHostDevice/MouseHostDevice.h @@@ -1,0 -1,0 +1,78 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 MouseHost.c. ++ */ ++ ++#ifndef _MOUSE_HOST_DEVICE_H_ ++#define _MOUSE_HOST_DEVICE_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/pgmspace.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <stdio.h> ++ ++ #include <LUFA/Drivers/Misc/TerminalCodes.h> ++ #include <LUFA/Drivers/Peripheral/Serial.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/Platform/Platform.h> ++ ++ #include "Descriptors.h" ++ #include "DeviceFunctions.h" ++ #include "HostFunctions.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 EVENT_USB_UIDChange(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/DualRole/ClassDriver/MouseHostDevice/MouseHostDevice.txt index 000000000,000000000..d3fb9a561 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/DualRole/ClassDriver/MouseHostDevice/MouseHostDevice.txt @@@ -1,0 -1,0 +1,80 @@@ ++/** \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 Mouse Host/Device Dual Role Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * ++ * \section Sec_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>Dual Mode Host/Device</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Class:</b></td> ++ * <td>Human Interface Device (HID)</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>N/A</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF HID Specification, USBIF HID Usage Tables</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Low Speed Mode, Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Mouse host/device dual role demonstration application. This gives a simple ++ * reference application for implementing a dual role USB Mouse, for USB mice ++ * using the standard mouse boot protocol HID profile. ++ * ++ * <b>When in host mode:</b> ++ * Mouse movement and button presses are displayed on the board LEDs, ++ * as well as printed out the serial terminal as formatted dY, dY and ++ * button status information. ++ * ++ * This uses a naive method where the mouse is set to Boot Protocol mode, so ++ * that the report structure is fixed and known. A better implementation ++ * uses the HID report parser for correct report data processing across ++ * all compatible mice with advanced characteristics, as shown in the ++ * MouseHostWithParser Host demo application. ++ * ++ * Currently only single interface mice are supported. ++ * ++ * <b>When in device mode:</b> ++ * Upon enumeration the system will automatically enumerate and function ++ * as a mouse when the USB connection to a host is present. To use ++ * the mouse, move the joystick to move the pointer, and push the ++ * joystick inwards to simulate a left-button click. The HWB serves as ++ * the right mouse button. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/DualRole/ClassDriver/MouseHostDevice/asf.xml index 000000000,000000000..7cd93babb new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/DualRole/ClassDriver/MouseHostDevice/asf.xml @@@ -1,0 -1,0 +1,56 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Mouse HID Dual USB Mode Demo (Class Driver APIs)" id="lufa.demos.dualrole.class.mouse.example.avr8"> ++ <require idref="lufa.demos.dualrole.class.mouse"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.dualrole.class.mouse" caption="Mouse HID Dual USB Mode Demo (Class Driver APIs)"> ++ <info type="description" value="summary"> ++ Mouse host and device dual role demo, implementing a basic mouse device and host. This demo uses the user-friendly USB Class Driver APIs to provide a simple, abstracted interface into the USB stack. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Class Driver APIs"/> ++ <keyword value="USB Dual Role"/> ++ <keyword value="HID Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="MouseHostDevice.txt"/> ++ ++ <build type="c-source" value="MouseHostDevice.c"/> ++ <build type="c-source" value="Descriptors.c"/> ++ <build type="c-source" value="DeviceFunctions.c"/> ++ <build type="c-source" value="HostFunctions.c"/> ++ <build type="header-file" value="MouseHostDevice.h"/> ++ <build type="header-file" value="Descriptors.h"/> ++ <build type="header-file" value="DeviceFunctions.h"/> ++ <build type="header-file" value="HostFunctions.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.peripheral.usart"/> ++ <require idref="lufa.drivers.misc.ansi"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ <require idref="lufa.drivers.board.joystick"/> ++ <require idref="lufa.drivers.board.buttons"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/DualRole/ClassDriver/MouseHostDevice/doxyfile index 000000000,000000000..0bfe97d54 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/DualRole/ClassDriver/MouseHostDevice/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Mouse Host/Device Dual Role 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/DualRole/ClassDriver/MouseHostDevice/makefile index 000000000,000000000..b96522990 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/DualRole/ClassDriver/MouseHostDevice/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = MouseHostDevice ++SRC = $(TARGET).c Descriptors.c DeviceFunctions.c HostFunctions.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) $(LUFA_SRC_SERIAL) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/DualRole/ClassDriver/makefile index 000000000,000000000..e5cc04939 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/DualRole/ClassDriver/makefile @@@ -1,0 -1,0 +1,46 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++ ++# Makefile to build all the LUFA Dual Role Demos. Call with "make all" to ++# rebuild all Dual Role demos. ++ ++# Projects are pre-cleaned before each one is built, to ensure any ++# custom LUFA library build options are reflected in the compiled ++# code. ++ ++PROJECT_DIRECTORIES := $(shell ls -d */) ++ ++# This makefile is potentially infinitely recursive if something really bad ++# happens when determining the set of project directories - hard-abort if ++# more than 10 levels deep to avoid angry emails. ++ifeq ($(MAKELEVEL), 10) ++ $(error EMERGENCY ABORT: INFINITE RECURSION DETECTED) ++endif ++ ++# Need to special-case building without a per-project object directory ++ifeq ($(OBJDIR),) ++ # If no target specified, force "clean all" and disallow parallel build ++ ifeq ($(MAKECMDGOALS),) ++ MAKECMDGOALS := clean all ++ .NOTPARALLEL: ++ endif ++ ++ # If one of the targets is to build, force "clean" beforehand and disallow parallel build ++ ifneq ($(findstring all, $(MAKECMDGOALS)),) ++ MAKECMDGOALS := clean $(MAKECMDGOALS) ++ .NOTPARALLEL: ++ endif ++endif ++ ++%: $(PROJECT_DIRECTORIES) ++ @echo . > /dev/null ++ ++$(PROJECT_DIRECTORIES): ++ @$(MAKE) -C $@ $(MAKECMDGOALS) ++ ++.PHONY: $(PROJECT_DIRECTORIES) diff --cc lib/lufa/Demos/DualRole/makefile index 000000000,000000000..f2530c57a new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/DualRole/makefile @@@ -1,0 -1,0 +1,20 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++ ++# Makefile to build all the LUFA Class Driver and Low Level Demos. Call with ++# "make all" to rebuild all demos of both types. ++ ++# Projects are pre-cleaned before each one is built, to ensure any ++# custom LUFA library build options are reflected in the compiled ++# code. ++ ++all: ++ ++%: ++ $(MAKE) -C ClassDriver $@ ++ diff --cc lib/lufa/Demos/Host/ClassDriver/AndroidAccessoryHost/AndroidAccessoryHost.c index 000000000,000000000..48178d68d new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/AndroidAccessoryHost/AndroidAccessoryHost.c @@@ -1,0 -1,0 +1,239 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 AndroidAccessoryHost demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "AndroidAccessoryHost.h" ++ ++/** LUFA Android Open Accessory Class driver interface configuration and state information. This ++ * structure is passed to all Android Open Accessory Class driver functions, so that multiple ++ * instances of the same class within a device can be differentiated from one another. ++ */ ++USB_ClassInfo_AOA_Host_t AndroidDevice_AOA_Interface = ++ { ++ .Config = ++ { ++ .DataINPipe = ++ { ++ .Address = (PIPE_DIR_IN | 1), ++ .Banks = 1, ++ }, ++ .DataOUTPipe = ++ { ++ .Address = (PIPE_DIR_OUT | 2), ++ .Banks = 1, ++ }, ++ .PropertyStrings = ++ { ++ [AOA_STRING_Manufacturer] = "Dean Camera", ++ [AOA_STRING_Model] = "LUFA Android Demo", ++ [AOA_STRING_Description] = "LUFA Android Demo", ++ [AOA_STRING_Version] = "1.0", ++ [AOA_STRING_URI] = "http://www.lufa-lib.org", ++ [AOA_STRING_Serial] = "0000000012345678", ++ }, ++ }, ++ }; ++ ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ puts_P(PSTR(ESC_FG_CYAN "Android Accessory Host Demo running.\r\n" ESC_FG_WHITE)); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ AOAHost_Task(); ++ ++ AOA_Host_USBTask(&AndroidDevice_AOA_Interface); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#endif ++ ++ /* Hardware Initialization */ ++ Serial_Init(9600, false); ++ LEDs_Init(); ++ USB_Init(); ++ ++ /* Create a stdio stream for the serial port for stdin and stdout */ ++ Serial_CreateStream(NULL); ++} ++ ++/** Task to manage an enumerated USB Android Accessory device once connected, to print received data ++ * from the device to the serial port. ++ */ ++void AOAHost_Task(void) ++{ ++ if (USB_HostState != HOST_STATE_Configured) ++ return; ++ ++ if (AOA_Host_BytesReceived(&AndroidDevice_AOA_Interface)) ++ { ++ /* Echo received bytes from the attached device through the USART */ ++ int16_t ReceivedByte = AOA_Host_ReceiveByte(&AndroidDevice_AOA_Interface); ++ if (!(ReceivedByte < 0)) ++ { ++ /* Turn on and off LED1 based on the bytes received */ ++ LEDs_ChangeLEDs(LEDS_LED1, ReceivedByte ? LEDS_LED1 : LEDS_NO_LEDS); ++ ++ putchar(ReceivedByte); ++ } ++ } ++} ++ ++/** Event handler for the USB_DeviceAttached event. This indicates that a device has been attached to the host, and ++ * starts the library USB task to begin the enumeration and USB management process. ++ */ ++void EVENT_USB_Host_DeviceAttached(void) ++{ ++ puts_P(PSTR("Device Attached.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the USB_DeviceUnattached event. This indicates that a device has been removed from the host, and ++ * stops the library USB task management process. ++ */ ++void EVENT_USB_Host_DeviceUnattached(void) ++{ ++ puts_P(PSTR("\r\nDevice Unattached.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_DeviceEnumerationComplete event. This indicates that a device has been successfully ++ * enumerated by the host and is now ready to be used by the application. ++ */ ++void EVENT_USB_Host_DeviceEnumerationComplete(void) ++{ ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++ ++ USB_Descriptor_Device_t DeviceDescriptor; ++ ++ if (USB_Host_GetDeviceDescriptor(&DeviceDescriptor) != HOST_SENDCONTROL_Successful) ++ { ++ puts_P(PSTR("Error Retrieving Device Descriptor.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ bool NeedModeSwitch; ++ if (!(AOA_Host_ValidateAccessoryDevice(&AndroidDevice_AOA_Interface, &DeviceDescriptor, &NeedModeSwitch))) ++ { ++ puts_P(PSTR("Not an Android device.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (NeedModeSwitch) ++ { ++ puts_P(PSTR("Not in Accessory mode, switching...\r\n")); ++ AOA_Host_StartAccessoryMode(&AndroidDevice_AOA_Interface); ++ return; ++ } ++ ++ uint16_t ConfigDescriptorSize; ++ uint8_t ConfigDescriptorData[512]; ++ ++ if (USB_Host_GetDeviceConfigDescriptor(1, &ConfigDescriptorSize, ConfigDescriptorData, ++ sizeof(ConfigDescriptorData)) != HOST_GETCONFIG_Successful) ++ { ++ puts_P(PSTR("Error Retrieving Configuration Descriptor.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (AOA_Host_ConfigurePipes(&AndroidDevice_AOA_Interface, ++ ConfigDescriptorSize, ConfigDescriptorData) != AOA_ENUMERROR_NoError) ++ { ++ puts_P(PSTR("Attached Device Not a Valid Android Accessory Class Device.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (USB_Host_SetDeviceConfiguration(1) != HOST_SENDCONTROL_Successful) ++ { ++ puts_P(PSTR("Error Setting Device Configuration.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ puts_P(PSTR("Android Device Enumerated.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++} ++ ++/** Event handler for the USB_HostError event. This indicates that a hardware error occurred while in host mode. */ ++void EVENT_USB_Host_HostError(const uint8_t ErrorCode) ++{ ++ USB_Disable(); ++ ++ printf_P(PSTR(ESC_FG_RED "Host Mode Error\r\n" ++ " -- Error Code %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ for(;;); ++} ++ ++/** Event handler for the USB_DeviceEnumerationFailed event. This indicates that a problem occurred while ++ * enumerating an attached USB device. ++ */ ++void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode) ++{ ++ printf_P(PSTR(ESC_FG_RED "Dev Enum Error\r\n" ++ " -- Error Code %d\r\n" ++ " -- Sub Error Code %d\r\n" ++ " -- In State %d\r\n" ESC_FG_WHITE), ErrorCode, SubErrorCode, USB_HostState); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++} ++ ++ diff --cc lib/lufa/Demos/Host/ClassDriver/AndroidAccessoryHost/AndroidAccessoryHost.h index 000000000,000000000..d7c868f7f new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/AndroidAccessoryHost/AndroidAccessoryHost.h @@@ -1,0 -1,0 +1,79 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 AndroidAccessoryHost.c. ++ */ ++ ++#ifndef _ANDROIDACCESSORY_HOST_H_ ++#define _ANDROIDACCESSORY_HOST_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/pgmspace.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <stdio.h> ++ ++ #include <LUFA/Drivers/Misc/TerminalCodes.h> ++ #include <LUFA/Drivers/Peripheral/Serial.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Platform/Platform.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 AOAHost_Task(void); ++ ++ void EVENT_USB_Host_HostError(const uint8_t ErrorCode); ++ void EVENT_USB_Host_DeviceAttached(void); ++ void EVENT_USB_Host_DeviceUnattached(void); ++ void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode); ++ void EVENT_USB_Host_DeviceEnumerationComplete(void); ++ ++#endif ++ ++ diff --cc lib/lufa/Demos/Host/ClassDriver/AndroidAccessoryHost/AndroidAccessoryHost.txt index 000000000,000000000..63d192d1a new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/AndroidAccessoryHost/AndroidAccessoryHost.txt @@@ -1,0 -1,0 +1,62 @@@ ++/** \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 Android Accessory Host Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * ++ * \section Sec_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>Host</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Class:</b></td> ++ * <td>Android Accessory Host Class</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>N/A</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>Android Accessory Host Specification</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Android Accessory Host demonstration application. This gives a simple reference ++ * application for implementing an Android Accessory Host device capable of hosting ++ * Android powered mobile devices to send and receive data. ++ * ++ * Data sent from the Android device will be sent out the AVR's serial port. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Host/ClassDriver/AndroidAccessoryHost/AndroidHostApp/AndroidHostApp.zip index 000000000,000000000..c433d79e1 new file mode 100644 Binary files differ diff --cc lib/lufa/Demos/Host/ClassDriver/AndroidAccessoryHost/Config/LUFAConfig.h index 000000000,000000000..1d840f618 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/AndroidAccessoryHost/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++// #define USB_DEVICE_ONLY ++ #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++// #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++// #define FIXED_CONTROL_ENDPOINT_SIZE {Insert Value Here} ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++// #define FIXED_NUM_CONFIGURATIONS {Insert Value Here} ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++ #define HOST_DEVICE_SETTLE_DELAY_MS 0 ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Host/ClassDriver/AndroidAccessoryHost/asf.xml index 000000000,000000000..59efae361 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/AndroidAccessoryHost/asf.xml @@@ -1,0 -1,0 +1,49 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Android Accessory Host Demo (Class Driver APIs)" id="lufa.demos.host.class.android.example.avr8"> ++ <require idref="lufa.demos.host.class.android"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.host.class.android" caption="Android Accessory Host Demo (Class Driver APIs)"> ++ <info type="description" value="summary"> ++ Android Accessory Host demo, implementing a basic USB device whose LEDs can be controlled via an Android device. This demo uses the user-friendly USB Class Driver APIs to provide a simple, abstracted interface into the USB stack. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Class Driver APIs"/> ++ <keyword value="USB Host"/> ++ <keyword value="Android Accessory Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="AndroidAccessoryHost.txt"/> ++ <build type="distribute" subtype="directory" value="AndroidHostApp"/> ++ ++ <build type="c-source" value="AndroidAccessoryHost.c"/> ++ <build type="header-file" value="AndroidAccessoryHost.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.peripheral.usart"/> ++ <require idref="lufa.drivers.misc.ansi"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Host/ClassDriver/AndroidAccessoryHost/doxyfile index 000000000,000000000..6fd6211d3 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/AndroidAccessoryHost/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Android Accessory Mode Host 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Host/ClassDriver/AndroidAccessoryHost/makefile index 000000000,000000000..a769ee3d1 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/AndroidAccessoryHost/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = AndroidAccessoryHost ++SRC = $(TARGET).c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) $(LUFA_SRC_SERIAL) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Host/ClassDriver/AudioInputHost/AudioInputHost.c index 000000000,000000000..ad4501151 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/AudioInputHost/AudioInputHost.c @@@ -1,0 -1,0 +1,239 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 AudioInputHost demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "AudioInputHost.h" ++ ++/** LUFA Audio Class driver interface configuration and state information. This structure is ++ * passed to all Audio Class driver functions, so that multiple instances of the same class ++ * within a device can be differentiated from one another. ++ */ ++USB_ClassInfo_Audio_Host_t Microphone_Audio_Interface = ++ { ++ .Config = ++ { ++ .DataINPipe = ++ { ++ .Address = (PIPE_DIR_IN | 1), ++ }, ++ }, ++ }; ++ ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ puts_P(PSTR(ESC_FG_CYAN "Audio Input Host Demo running.\r\n" ESC_FG_WHITE)); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ Audio_Host_USBTask(&Microphone_Audio_Interface); ++ USB_USBTask(); ++ } ++} ++ ++/** ISR to handle the reloading of the PWM timer with the next sample. */ ++ISR(TIMER0_COMPA_vect, ISR_BLOCK) ++{ ++ uint8_t PrevPipe = Pipe_GetCurrentPipe(); ++ ++ /* Check that the USB bus is ready for the next sample to read */ ++ if (Audio_Host_IsSampleReceived(&Microphone_Audio_Interface)) ++ { ++ /* Retrieve the signed 16-bit audio sample, convert to 8-bit */ ++ int8_t Sample_8Bit = (Audio_Host_ReadSample16(&Microphone_Audio_Interface) >> 8); ++ ++ /* Load the sample into the PWM timer channel */ ++ OCR3A = (Sample_8Bit ^ (1 << 7)); ++ ++ uint8_t LEDMask = LEDS_NO_LEDS; ++ ++ /* Turn on LEDs as the sample amplitude increases */ ++ if (Sample_8Bit > 16) ++ LEDMask = (LEDS_LED1 | LEDS_LED2 | LEDS_LED3 | LEDS_LED4); ++ else if (Sample_8Bit > 8) ++ LEDMask = (LEDS_LED1 | LEDS_LED2 | LEDS_LED3); ++ else if (Sample_8Bit > 4) ++ LEDMask = (LEDS_LED1 | LEDS_LED2); ++ else if (Sample_8Bit > 2) ++ LEDMask = (LEDS_LED1); ++ ++ LEDs_SetAllLEDs(LEDMask); ++ } ++ ++ Pipe_SelectPipe(PrevPipe); ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#endif ++ ++ /* Hardware Initialization */ ++ Serial_Init(9600, false); ++ LEDs_Init(); ++ USB_Init(); ++ ++ /* Create a stdio stream for the serial port for stdin and stdout */ ++ Serial_CreateStream(NULL); ++} ++ ++/** Event handler for the USB_DeviceAttached event. This indicates that a device has been attached to the host, and ++ * starts the library USB task to begin the enumeration and USB management process. ++ */ ++void EVENT_USB_Host_DeviceAttached(void) ++{ ++ puts_P(PSTR("Device Attached.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the USB_DeviceUnattached event. This indicates that a device has been removed from the host, and ++ * stops the library USB task management process. ++ */ ++void EVENT_USB_Host_DeviceUnattached(void) ++{ ++ puts_P(PSTR("\r\nDevice Unattached.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_DeviceEnumerationComplete event. This indicates that a device has been successfully ++ * enumerated by the host and is now ready to be used by the application. ++ */ ++void EVENT_USB_Host_DeviceEnumerationComplete(void) ++{ ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++ ++ uint16_t ConfigDescriptorSize; ++ uint8_t ConfigDescriptorData[512]; ++ ++ if (USB_Host_GetDeviceConfigDescriptor(1, &ConfigDescriptorSize, ConfigDescriptorData, ++ sizeof(ConfigDescriptorData)) != HOST_GETCONFIG_Successful) ++ { ++ puts_P(PSTR("Error Retrieving Configuration Descriptor.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (Audio_Host_ConfigurePipes(&Microphone_Audio_Interface, ++ ConfigDescriptorSize, ConfigDescriptorData) != AUDIO_ENUMERROR_NoError) ++ { ++ puts_P(PSTR("Attached Device Not a Valid Audio Input Device.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (USB_Host_SetDeviceConfiguration(1) != HOST_SENDCONTROL_Successful) ++ { ++ puts_P(PSTR("Error Setting Device Configuration.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (Audio_Host_StartStopStreaming(&Microphone_Audio_Interface, true) != HOST_SENDCONTROL_Successful) ++ { ++ puts_P(PSTR("Error Enabling Audio Stream.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ USB_Audio_SampleFreq_t SampleRate = AUDIO_SAMPLE_FREQ(48000); ++ if (Audio_Host_GetSetEndpointProperty(&Microphone_Audio_Interface, Microphone_Audio_Interface.Config.DataINPipe.Address, ++ AUDIO_REQ_SetCurrent, AUDIO_EPCONTROL_SamplingFreq, ++ sizeof(SampleRate), &SampleRate) != HOST_SENDCONTROL_Successful) ++ { ++ puts_P(PSTR("Error Setting Audio Sampling Frequency.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ /* Sample reload timer initialization */ ++ TIMSK0 = (1 << OCIE0A); ++ OCR0A = ((F_CPU / 8 / 48000) - 1); ++ TCCR0A = (1 << WGM01); // CTC mode ++ TCCR0B = (1 << CS01); // Fcpu/8 speed ++ ++ /* Set speaker as output */ ++ DDRC |= (1 << 6); ++ ++ /* PWM speaker timer initialization */ ++ TCCR3A = ((1 << WGM30) | (1 << COM3A1) | (1 << COM3A0)); // Set on match, clear on TOP ++ TCCR3B = ((1 << WGM32) | (1 << CS30)); // Fast 8-Bit PWM, F_CPU speed ++ ++ puts_P(PSTR("Audio Device Enumerated.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++} ++ ++/** Event handler for the USB_HostError event. This indicates that a hardware error occurred while in host mode. */ ++void EVENT_USB_Host_HostError(const uint8_t ErrorCode) ++{ ++ USB_Disable(); ++ ++ printf_P(PSTR(ESC_FG_RED "Host Mode Error\r\n" ++ " -- Error Code %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ for(;;); ++} ++ ++/** Event handler for the USB_DeviceEnumerationFailed event. This indicates that a problem occurred while ++ * enumerating an attached USB device. ++ */ ++void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode) ++{ ++ printf_P(PSTR(ESC_FG_RED "Dev Enum Error\r\n" ++ " -- Error Code %d\r\n" ++ " -- Sub Error Code %d\r\n" ++ " -- In State %d\r\n" ESC_FG_WHITE), ErrorCode, SubErrorCode, USB_HostState); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++} ++ diff --cc lib/lufa/Demos/Host/ClassDriver/AudioInputHost/AudioInputHost.h index 000000000,000000000..dfdc31912 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/AudioInputHost/AudioInputHost.h @@@ -1,0 -1,0 +1,77 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 AudioInputHost.c. ++ */ ++ ++#ifndef _AUDIO_INPUT_HOST_H_ ++#define _AUDIO_INPUT_HOST_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/pgmspace.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <stdio.h> ++ ++ #include <LUFA/Drivers/Misc/TerminalCodes.h> ++ #include <LUFA/Drivers/Peripheral/Serial.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Platform/Platform.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 EVENT_USB_Host_HostError(const uint8_t ErrorCode); ++ void EVENT_USB_Host_DeviceAttached(void); ++ void EVENT_USB_Host_DeviceUnattached(void); ++ void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode); ++ void EVENT_USB_Host_DeviceEnumerationComplete(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/ClassDriver/AudioInputHost/AudioInputHost.txt index 000000000,000000000..0736e0df4 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/AudioInputHost/AudioInputHost.txt @@@ -1,0 -1,0 +1,66 @@@ ++/** \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 Audio Input Host Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * ++ * \section Sec_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>Host</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Class:</b></td> ++ * <td>Audio Class</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>Standard Audio Device</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF Audio 1.0 Class Specification \n ++ * USBIF Audio 1.0 Class Terminal Types Specification \n ++ * USBIF Audio 1.0 Data Formats Specification</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Audio Input host demonstration application. This gives a simple reference ++ * application for implementing a USB Audio host, for USB Audio devices using ++ * the USB Audio 1.0 class profile. ++ * ++ * Incoming audio will output in 8-bit PWM onto the timer 3 output compare ++ * channel A, and will also be indicated on the board LEDs. Decouple the PWM ++ * output with a capacitor and attach to a speaker to hear the audio. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Host/ClassDriver/AudioInputHost/Config/LUFAConfig.h index 000000000,000000000..197122fce new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/AudioInputHost/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++// #define USB_DEVICE_ONLY ++ #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++// #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++// #define FIXED_CONTROL_ENDPOINT_SIZE {Insert Value Here} ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++// #define FIXED_NUM_CONFIGURATIONS {Insert Value Here} ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Host/ClassDriver/AudioInputHost/asf.xml index 000000000,000000000..c2daffbdf new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/AudioInputHost/asf.xml @@@ -1,0 -1,0 +1,48 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Audio Input Host Demo (Class Driver APIs)" id="lufa.demos.host.class.audio_input.example.avr8"> ++ <require idref="lufa.demos.host.class.audio_input"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.host.class.audio_input" caption="Audio Input Host Demo (Class Driver APIs)"> ++ <info type="description" value="summary"> ++ Audio Input Host demo, implementing a basic USB audio sink that can output incoming audio data to a speaker. This demo uses the user-friendly USB Class Driver APIs to provide a simple, abstracted interface into the USB stack. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Class Driver APIs"/> ++ <keyword value="USB Host"/> ++ <keyword value="Audio Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="AudioInputHost.txt"/> ++ ++ <build type="c-source" value="AudioInputHost.c"/> ++ <build type="header-file" value="AudioInputHost.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.peripheral.usart"/> ++ <require idref="lufa.drivers.misc.ansi"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Host/ClassDriver/AudioInputHost/doxyfile index 000000000,000000000..dda008658 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/AudioInputHost/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Audio Input Host 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Host/ClassDriver/AudioInputHost/makefile index 000000000,000000000..35294e964 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/AudioInputHost/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = AudioInputHost ++SRC = $(TARGET).c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) $(LUFA_SRC_SERIAL) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Host/ClassDriver/AudioOutputHost/AudioOutputHost.c index 000000000,000000000..6ef74c3aa new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/AudioOutputHost/AudioOutputHost.c @@@ -1,0 -1,0 +1,243 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 AudioOutputHost demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "AudioOutputHost.h" ++ ++/** LUFA Audio Class driver interface configuration and state information. This structure is ++ * passed to all Audio Class driver functions, so that multiple instances of the same class ++ * within a device can be differentiated from one another. ++ */ ++USB_ClassInfo_Audio_Host_t Speaker_Audio_Interface = ++ { ++ .Config = ++ { ++ .DataOUTPipe = ++ { ++ .Address = (PIPE_DIR_OUT | 2), ++ }, ++ }, ++ }; ++ ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ puts_P(PSTR(ESC_FG_CYAN "Audio Output Host Demo running.\r\n" ESC_FG_WHITE)); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ Audio_Host_USBTask(&Speaker_Audio_Interface); ++ USB_USBTask(); ++ } ++} ++ ++/** ISR to handle the reloading of the PWM timer with the next sample. */ ++ISR(TIMER0_COMPA_vect, ISR_BLOCK) ++{ ++ uint8_t PrevPipe = Pipe_GetCurrentPipe(); ++ ++ /* Check that the USB bus is ready for the next sample to write */ ++ if (Audio_Host_IsReadyForNextSample(&Speaker_Audio_Interface)) ++ { ++ int16_t AudioSample; ++ ++ #if defined(USE_TEST_TONE) ++ static uint8_t SquareWaveSampleCount; ++ static int16_t CurrentWaveValue; ++ ++ /* In test tone mode, generate a square wave at 1/256 of the sample rate */ ++ if (SquareWaveSampleCount++ == 0xFF) ++ CurrentWaveValue ^= 0x8000; ++ ++ /* Only generate audio if the board button is being pressed */ ++ AudioSample = (Buttons_GetStatus() & BUTTONS_BUTTON1) ? CurrentWaveValue : 0; ++ #else ++ /* Audio sample is ADC value scaled to fit the entire range */ ++ AudioSample = ((SAMPLE_MAX_RANGE / ADC_MAX_RANGE) * ADC_GetResult()); ++ ++ #if defined(MICROPHONE_BIASED_TO_HALF_RAIL) ++ /* Microphone is biased to half rail voltage, subtract the bias from the sample value */ ++ AudioSample -= (SAMPLE_MAX_RANGE / 2); ++ #endif ++ #endif ++ ++ Audio_Host_WriteSample16(&Speaker_Audio_Interface, AudioSample); ++ Audio_Host_WriteSample16(&Speaker_Audio_Interface, AudioSample); ++ } ++ ++ Pipe_SelectPipe(PrevPipe); ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#endif ++ ++ /* Hardware Initialization */ ++ Serial_Init(9600, false); ++ LEDs_Init(); ++ Buttons_Init(); ++ ADC_Init(ADC_FREE_RUNNING | ADC_PRESCALE_32); ++ ADC_SetupChannel(MIC_IN_ADC_CHANNEL); ++ USB_Init(); ++ ++ /* Create a stdio stream for the serial port for stdin and stdout */ ++ Serial_CreateStream(NULL); ++ ++ /* Start the ADC conversion in free running mode */ ++ ADC_StartReading(ADC_REFERENCE_AVCC | ADC_RIGHT_ADJUSTED | ADC_GET_CHANNEL_MASK(MIC_IN_ADC_CHANNEL)); ++} ++ ++/** Event handler for the USB_DeviceAttached event. This indicates that a device has been attached to the host, and ++ * starts the library USB task to begin the enumeration and USB management process. ++ */ ++void EVENT_USB_Host_DeviceAttached(void) ++{ ++ puts_P(PSTR("Device Attached.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the USB_DeviceUnattached event. This indicates that a device has been removed from the host, and ++ * stops the library USB task management process. ++ */ ++void EVENT_USB_Host_DeviceUnattached(void) ++{ ++ puts_P(PSTR("\r\nDevice Unattached.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_DeviceEnumerationComplete event. This indicates that a device has been successfully ++ * enumerated by the host and is now ready to be used by the application. ++ */ ++void EVENT_USB_Host_DeviceEnumerationComplete(void) ++{ ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++ ++ uint16_t ConfigDescriptorSize; ++ uint8_t ConfigDescriptorData[512]; ++ ++ if (USB_Host_GetDeviceConfigDescriptor(1, &ConfigDescriptorSize, ConfigDescriptorData, ++ sizeof(ConfigDescriptorData)) != HOST_GETCONFIG_Successful) ++ { ++ puts_P(PSTR("Error Retrieving Configuration Descriptor.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (Audio_Host_ConfigurePipes(&Speaker_Audio_Interface, ++ ConfigDescriptorSize, ConfigDescriptorData) != AUDIO_ENUMERROR_NoError) ++ { ++ puts_P(PSTR("Attached Device Not a Valid Audio Output Device.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (USB_Host_SetDeviceConfiguration(1) != HOST_SENDCONTROL_Successful) ++ { ++ puts_P(PSTR("Error Setting Device Configuration.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (Audio_Host_StartStopStreaming(&Speaker_Audio_Interface, true) != HOST_SENDCONTROL_Successful) ++ { ++ puts_P(PSTR("Error Enabling Audio Stream.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ USB_Audio_SampleFreq_t SampleRate = AUDIO_SAMPLE_FREQ(48000); ++ if (Audio_Host_GetSetEndpointProperty(&Speaker_Audio_Interface, Speaker_Audio_Interface.Config.DataOUTPipe.Address, ++ AUDIO_REQ_SetCurrent, AUDIO_EPCONTROL_SamplingFreq, ++ sizeof(SampleRate), &SampleRate) != HOST_SENDCONTROL_Successful) ++ { ++ puts_P(PSTR("Error Setting Audio Sampling Frequency.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ /* Sample reload timer initialization */ ++ TIMSK0 = (1 << OCIE0A); ++ OCR0A = ((F_CPU / 8 / 48000) - 1); ++ TCCR0A = (1 << WGM01); // CTC mode ++ TCCR0B = (1 << CS01); // Fcpu/8 speed ++ ++ puts_P(PSTR("Audio Device Enumerated.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++} ++ ++/** Event handler for the USB_HostError event. This indicates that a hardware error occurred while in host mode. */ ++void EVENT_USB_Host_HostError(const uint8_t ErrorCode) ++{ ++ USB_Disable(); ++ ++ printf_P(PSTR(ESC_FG_RED "Host Mode Error\r\n" ++ " -- Error Code %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ for(;;); ++} ++ ++/** Event handler for the USB_DeviceEnumerationFailed event. This indicates that a problem occurred while ++ * enumerating an attached USB device. ++ */ ++void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode) ++{ ++ printf_P(PSTR(ESC_FG_RED "Dev Enum Error\r\n" ++ " -- Error Code %d\r\n" ++ " -- Sub Error Code %d\r\n" ++ " -- In State %d\r\n" ESC_FG_WHITE), ErrorCode, SubErrorCode, USB_HostState); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++} ++ diff --cc lib/lufa/Demos/Host/ClassDriver/AudioOutputHost/AudioOutputHost.h index 000000000,000000000..ff8a452d0 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/AudioOutputHost/AudioOutputHost.h @@@ -1,0 -1,0 +1,87 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 AudioOutputHost.c. ++ */ ++ ++#ifndef _AUDIO_OUTPUT_HOST_H_ ++#define _AUDIO_OUTPUT_HOST_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/pgmspace.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <stdio.h> ++ ++ #include <LUFA/Drivers/Misc/TerminalCodes.h> ++ #include <LUFA/Drivers/Peripheral/Serial.h> ++ #include <LUFA/Drivers/Peripheral/ADC.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/Board/Buttons.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Platform/Platform.h> ++ ++ #include "Config/AppConfig.h" ++ ++ /* Macros: */ ++ /** Maximum audio sample value for the microphone input. */ ++ #define SAMPLE_MAX_RANGE 0xFFFF ++ ++ /** Maximum ADC range for the microphone input. */ ++ #define ADC_MAX_RANGE 0x3FF ++ ++ /** 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 EVENT_USB_Host_HostError(const uint8_t ErrorCode); ++ void EVENT_USB_Host_DeviceAttached(void); ++ void EVENT_USB_Host_DeviceUnattached(void); ++ void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode); ++ void EVENT_USB_Host_DeviceEnumerationComplete(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/ClassDriver/AudioOutputHost/AudioOutputHost.txt index 000000000,000000000..5e79a33e3 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/AudioOutputHost/AudioOutputHost.txt @@@ -1,0 -1,0 +1,83 @@@ ++/** \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 Audio Output Host Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * ++ * \section Sec_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>Host</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Class:</b></td> ++ * <td>Audio Class</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>Standard Audio Device</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF Audio 1.0 Class Specification \n ++ * USBIF Audio 1.0 Class Terminal Types Specification \n ++ * USBIF Audio 1.0 Data Formats Specification</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Audio Output host demonstration application. This gives a simple reference ++ * application for implementing a USB Audio host, for USB Audio devices using ++ * the USB Audio 1.0 class profile. ++ * ++ * By default, the demo will produce a square wave test tone when the board ++ * button is pressed. If USE_TEST_TONE is not defined in the project makefile, ++ * incoming audio from the ADC channel 1 will be sampled and sent to the attached ++ * USB audio device instead. ++ * ++ * \section Sec_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> ++ * <th><b>Define Name:</b></th> ++ * <th><b>Location:</b></th> ++ * <th><b>Description:</b></th> ++ * </tr> ++ * <tr> ++ * <td>MIC_IN_ADC_CHANNEL</td> ++ * <td>AppConfig.h</td> ++ * <td>Sets the ADC channel used by the demo for the input audio samples from an attached microphone.</td> ++ * </tr> ++ * <tr> ++ * <td>USE_TEST_TONE</td> ++ * <td>AppConfig.h</td> ++ * <td>When defined, this alters the demo to produce a square wave test tone when the first board button is pressed ++ * instead of sampling the board microphone.</td> ++ * </tr> ++ * <tr> ++ * <td>MICROPHONE_BIASED_TO_HALF_RAIL</td> ++ * <td>AppConfig.h</td> ++ * <td>When defined, this alters the demo so that the half VCC bias of the microphone input is subtracted.</td> ++ * </tr> ++ * </table> ++ */ ++ diff --cc lib/lufa/Demos/Host/ClassDriver/AudioOutputHost/Config/AppConfig.h index 000000000,000000000..ff8ed270d new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/AudioOutputHost/Config/AppConfig.h @@@ -1,0 -1,0 +1,51 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief Application Configuration Header File ++ * ++ * This is a header file which is be used to configure some of ++ * the application's compile time options, as an alternative to ++ * specifying the compile time constants supplied through a ++ * makefile or build system. ++ * ++ * For information on what each token does, refer to the ++ * \ref Sec_Options section of the application documentation. ++ */ ++ ++#ifndef _APP_CONFIG_H_ ++#define _APP_CONFIG_H_ ++ ++ #define MIC_IN_ADC_CHANNEL 2 ++ ++ #define MICROPHONE_BIASED_TO_HALF_RAIL ++ #define USE_TEST_TONE ++ ++#endif diff --cc lib/lufa/Demos/Host/ClassDriver/AudioOutputHost/Config/LUFAConfig.h index 000000000,000000000..197122fce new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/AudioOutputHost/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++// #define USB_DEVICE_ONLY ++ #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++// #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++// #define FIXED_CONTROL_ENDPOINT_SIZE {Insert Value Here} ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++// #define FIXED_NUM_CONFIGURATIONS {Insert Value Here} ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Host/ClassDriver/AudioOutputHost/asf.xml index 000000000,000000000..6bd97286b new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/AudioOutputHost/asf.xml @@@ -1,0 -1,0 +1,52 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Audio Output Host Demo (Class Driver APIs)" id="lufa.demos.host.class.audio_output.example.avr8"> ++ <require idref="lufa.demos.host.class.audio_output"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.host.class.audio_output" caption="Audio Output Host Demo (Class Driver APIs)"> ++ <info type="description" value="summary"> ++ Audio Output Host demo, implementing a basic USB audio source that can output audio data to an attached device. This demo uses the user-friendly USB Class Driver APIs to provide a simple, abstracted interface into the USB stack. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Class Driver APIs"/> ++ <keyword value="USB Host"/> ++ <keyword value="Audio Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="AudioOutputHost.txt"/> ++ ++ <build type="c-source" value="AudioOutputHost.c"/> ++ <build type="header-file" value="AudioOutputHost.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="module-config" subtype="required-header-file" value="AppConfig.h"/> ++ <build type="header-file" value="Config/AppConfig.h"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.peripheral.usart"/> ++ <require idref="lufa.drivers.peripheral.adc"/> ++ <require idref="lufa.drivers.misc.ansi"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ <require idref="lufa.drivers.board.buttons"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Host/ClassDriver/AudioOutputHost/doxyfile index 000000000,000000000..c27221c69 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/AudioOutputHost/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Audio Output Host 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Host/ClassDriver/AudioOutputHost/makefile index 000000000,000000000..4d8611b64 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/AudioOutputHost/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = AudioOutputHost ++SRC = $(TARGET).c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) $(LUFA_SRC_SERIAL) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Host/ClassDriver/JoystickHostWithParser/Config/LUFAConfig.h index 000000000,000000000..197122fce new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/JoystickHostWithParser/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++// #define USB_DEVICE_ONLY ++ #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++// #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++// #define FIXED_CONTROL_ENDPOINT_SIZE {Insert Value Here} ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++// #define FIXED_NUM_CONFIGURATIONS {Insert Value Here} ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Host/ClassDriver/JoystickHostWithParser/JoystickHostWithParser.c index 000000000,000000000..095132859 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/JoystickHostWithParser/JoystickHostWithParser.c @@@ -1,0 -1,0 +1,286 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 JoystickHostWithParser demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "JoystickHostWithParser.h" ++ ++/** Processed HID report descriptor items structure, containing information on each HID report element */ ++static HID_ReportInfo_t HIDReportInfo; ++ ++/** 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_Host_t Joystick_HID_Interface = ++ { ++ .Config = ++ { ++ .DataINPipe = ++ { ++ .Address = (PIPE_DIR_IN | 1), ++ .Banks = 1, ++ }, ++ .DataOUTPipe = ++ { ++ .Address = (PIPE_DIR_OUT | 2), ++ .Banks = 1, ++ }, ++ .HIDInterfaceProtocol = HID_CSCP_NonBootProtocol, ++ .HIDParserData = &HIDReportInfo ++ }, ++ }; ++ ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ puts_P(PSTR(ESC_FG_CYAN "Joystick Host Demo running.\r\n" ESC_FG_WHITE)); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ JoystickHost_Task(); ++ ++ HID_Host_USBTask(&Joystick_HID_Interface); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#endif ++ ++ /* Hardware Initialization */ ++ Serial_Init(9600, false); ++ LEDs_Init(); ++ USB_Init(); ++ ++ /* Create a stdio stream for the serial port for stdin and stdout */ ++ Serial_CreateStream(NULL); ++} ++ ++/** Task to manage an enumerated USB joystick once connected, to display movement ++ * data as it is received. ++ */ ++void JoystickHost_Task(void) ++{ ++ if (USB_HostState != HOST_STATE_Configured) ++ return; ++ ++ if (HID_Host_IsReportReceived(&Joystick_HID_Interface)) ++ { ++ uint8_t JoystickReport[Joystick_HID_Interface.State.LargestReportSize]; ++ HID_Host_ReceiveReport(&Joystick_HID_Interface, &JoystickReport); ++ ++ uint8_t LEDMask = LEDS_NO_LEDS; ++ ++ for (uint8_t ReportNumber = 0; ReportNumber < HIDReportInfo.TotalReportItems; ReportNumber++) ++ { ++ HID_ReportItem_t* ReportItem = &HIDReportInfo.ReportItems[ReportNumber]; ++ ++ /* Update the report item value if it is contained within the current report */ ++ if (!(USB_GetHIDReportItemInfo(JoystickReport, ReportItem))) ++ continue; ++ ++ /* Determine what report item is being tested, process updated value as needed */ ++ if ((ReportItem->Attributes.Usage.Page == USAGE_PAGE_BUTTON) && ++ (ReportItem->ItemType == HID_REPORT_ITEM_In)) ++ { ++ if (ReportItem->Value) ++ LEDMask = LEDS_ALL_LEDS; ++ } ++ else if ((ReportItem->Attributes.Usage.Page == USAGE_PAGE_GENERIC_DCTRL) && ++ ((ReportItem->Attributes.Usage.Usage == USAGE_X) || ++ (ReportItem->Attributes.Usage.Usage == USAGE_Y)) && ++ (ReportItem->ItemType == HID_REPORT_ITEM_In)) ++ { ++ int16_t DeltaMovement = HID_ALIGN_DATA(ReportItem, int16_t); ++ ++ if (DeltaMovement) ++ { ++ if (ReportItem->Attributes.Usage.Usage == USAGE_X) ++ LEDMask |= ((DeltaMovement > 0) ? LEDS_LED1 : LEDS_LED2); ++ else ++ LEDMask |= ((DeltaMovement > 0) ? LEDS_LED3 : LEDS_LED4); ++ } ++ } ++ } ++ ++ LEDs_SetAllLEDs(LEDMask); ++ } ++} ++ ++/** Event handler for the USB_DeviceAttached event. This indicates that a device has been attached to the host, and ++ * starts the library USB task to begin the enumeration and USB management process. ++ */ ++void EVENT_USB_Host_DeviceAttached(void) ++{ ++ puts_P(PSTR("Device Attached.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the USB_DeviceUnattached event. This indicates that a device has been removed from the host, and ++ * stops the library USB task management process. ++ */ ++void EVENT_USB_Host_DeviceUnattached(void) ++{ ++ puts_P(PSTR("\r\nDevice Unattached.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_DeviceEnumerationComplete event. This indicates that a device has been successfully ++ * enumerated by the host and is now ready to be used by the application. ++ */ ++void EVENT_USB_Host_DeviceEnumerationComplete(void) ++{ ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++ ++ uint16_t ConfigDescriptorSize; ++ uint8_t ConfigDescriptorData[512]; ++ ++ if (USB_Host_GetDeviceConfigDescriptor(1, &ConfigDescriptorSize, ConfigDescriptorData, ++ sizeof(ConfigDescriptorData)) != HOST_GETCONFIG_Successful) ++ { ++ puts_P(PSTR("Error Retrieving Configuration Descriptor.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (HID_Host_ConfigurePipes(&Joystick_HID_Interface, ++ ConfigDescriptorSize, ConfigDescriptorData) != HID_ENUMERROR_NoError) ++ { ++ puts_P(PSTR("Attached Device Not a Valid Joystick.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (USB_Host_SetDeviceConfiguration(1) != HOST_SENDCONTROL_Successful) ++ { ++ puts_P(PSTR("Error Setting Device Configuration.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (HID_Host_SetReportProtocol(&Joystick_HID_Interface) != 0) ++ { ++ puts_P(PSTR("Error Setting Report Protocol Mode or Not a Valid Joystick.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ puts_P(PSTR("Joystick Enumerated.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++} ++ ++/** Event handler for the USB_HostError event. This indicates that a hardware error occurred while in host mode. */ ++void EVENT_USB_Host_HostError(const uint8_t ErrorCode) ++{ ++ USB_Disable(); ++ ++ printf_P(PSTR(ESC_FG_RED "Host Mode Error\r\n" ++ " -- Error Code %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ for(;;); ++} ++ ++/** Event handler for the USB_DeviceEnumerationFailed event. This indicates that a problem occurred while ++ * enumerating an attached USB device. ++ */ ++void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode) ++{ ++ printf_P(PSTR(ESC_FG_RED "Dev Enum Error\r\n" ++ " -- Error Code %d\r\n" ++ " -- Sub Error Code %d\r\n" ++ " -- In State %d\r\n" ESC_FG_WHITE), ErrorCode, SubErrorCode, USB_HostState); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++} ++ ++/** Callback for the HID Report Parser. This function is called each time the HID report parser is about to store ++ * an IN, OUT or FEATURE item into the HIDReportInfo structure. To save on RAM, we are able to filter out items ++ * we aren't interested in (preventing us from being able to extract them later on, but saving on the RAM they would ++ * have occupied). ++ * ++ * \param[in] CurrentItem Pointer to the item the HID report parser is currently working with ++ * ++ * \return Boolean \c true if the item should be stored into the HID report structure, \c false if it should be discarded ++ */ ++bool CALLBACK_HIDParser_FilterHIDReportItem(HID_ReportItem_t* const CurrentItem) ++{ ++ bool IsJoystick = false; ++ ++ /* Iterate through the item's collection path, until either the root collection node or a collection with the ++ * Joystick Usage is found - this prevents Mice, which use identical descriptors except for the Joystick usage ++ * parent node, from being erroneously treated as a joystick by the demo ++ */ ++ for (HID_CollectionPath_t* CurrPath = CurrentItem->CollectionPath; CurrPath != NULL; CurrPath = CurrPath->Parent) ++ { ++ if ((CurrPath->Usage.Page == USAGE_PAGE_GENERIC_DCTRL) && ++ (CurrPath->Usage.Usage == USAGE_JOYSTICK)) ++ { ++ IsJoystick = true; ++ break; ++ } ++ } ++ ++ /* If a collection with the joystick usage was not found, indicate that we are not interested in this item */ ++ if (!IsJoystick) ++ return false; ++ ++ /* Check the attributes of the current item - see if we are interested in it or not; ++ * only store BUTTON and GENERIC_DESKTOP_CONTROL items into the Processed HID Report ++ * structure to save RAM and ignore the rest ++ */ ++ return ((CurrentItem->Attributes.Usage.Page == USAGE_PAGE_BUTTON) || ++ (CurrentItem->Attributes.Usage.Page == USAGE_PAGE_GENERIC_DCTRL)); ++} ++ diff --cc lib/lufa/Demos/Host/ClassDriver/JoystickHostWithParser/JoystickHostWithParser.h index 000000000,000000000..798900ecd new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/JoystickHostWithParser/JoystickHostWithParser.h @@@ -1,0 -1,0 +1,95 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 JoystickHostWithParser.c. ++ */ ++ ++#ifndef _JOYSTICK_HOST_H_ ++#define _JOYSTICK_HOST_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/pgmspace.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <stdio.h> ++ ++ #include <LUFA/Drivers/Misc/TerminalCodes.h> ++ #include <LUFA/Drivers/Peripheral/Serial.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Platform/Platform.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) ++ ++ /** HID Report Descriptor Usage Page value for a toggle button. */ ++ #define USAGE_PAGE_BUTTON 0x09 ++ ++ /** HID Report Descriptor Usage Page value for a Generic Desktop Control. */ ++ #define USAGE_PAGE_GENERIC_DCTRL 0x01 ++ ++ /** HID Report Descriptor Usage for a Joystick. */ ++ #define USAGE_JOYSTICK 0x04 ++ ++ /** HID Report Descriptor Usage value for a X axis movement. */ ++ #define USAGE_X 0x30 ++ ++ /** HID Report Descriptor Usage value for a Y axis movement. */ ++ #define USAGE_Y 0x31 ++ ++ /* Function Prototypes: */ ++ void SetupHardware(void); ++ void JoystickHost_Task(void); ++ ++ void EVENT_USB_Host_HostError(const uint8_t ErrorCode); ++ void EVENT_USB_Host_DeviceAttached(void); ++ void EVENT_USB_Host_DeviceUnattached(void); ++ void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode); ++ void EVENT_USB_Host_DeviceEnumerationComplete(void); ++ ++ bool CALLBACK_HIDParser_FilterHIDReportItem(HID_ReportItem_t* const CurrentItem); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/ClassDriver/JoystickHostWithParser/JoystickHostWithParser.txt index 000000000,000000000..9eba4ed86 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/JoystickHostWithParser/JoystickHostWithParser.txt @@@ -1,0 -1,0 +1,71 @@@ ++/** \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 Joystick Host With HID Descriptor Parser Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * ++ * \section Sec_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>Host</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Class:</b></td> ++ * <td>Human Interface Device (HID)</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>N/A</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF HID Specification \n ++ * USBIF HID Usage Tables</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Low Speed Mode \n ++ * Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Joystick host demonstration application. This gives a simple reference ++ * application for implementing a USB Joystick host, for USB joysticks using ++ * the standard joystick HID profile. It uses a HID parser for the HID ++ * reports, allowing for correct operation across all USB joysticks. This ++ * demo supports joysticks with a single HID report. ++ * ++ * Joystick movement and button presses are displayed on the board LEDs. ++ * On connection to a USB joystick, the report items will be processed and ++ * printed as a formatted list through the USART before the joystick is ++ * fully enumerated. ++ * ++ * Currently only single interface joysticks are supported. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Host/ClassDriver/JoystickHostWithParser/asf.xml index 000000000,000000000..8899d8139 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/JoystickHostWithParser/asf.xml @@@ -1,0 -1,0 +1,48 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Joystick HID (with parser) Host Demo (Class Driver APIs)" id="lufa.demos.host.class.joystick_parser.example.avr8"> ++ <require idref="lufa.demos.host.class.joystick_parser"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.host.class.joystick_parser" caption="Joystick HID (with parser) Host Demo (Class Driver APIs)"> ++ <info type="description" value="summary"> ++ Joystick HID Host demo with HID parser, implementing a basic USB joystick host that can display movement data on the board LEDs. This demo uses the user-friendly USB Class Driver APIs to provide a simple, abstracted interface into the USB stack. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Class Driver APIs"/> ++ <keyword value="USB Host"/> ++ <keyword value="HID Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="JoystickHostWithParser.txt"/> ++ ++ <build type="c-source" value="JoystickHostWithParser.c"/> ++ <build type="header-file" value="JoystickHostWithParser.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.peripheral.usart"/> ++ <require idref="lufa.drivers.misc.ansi"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Host/ClassDriver/JoystickHostWithParser/doxyfile index 000000000,000000000..e8f82b8fe new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/JoystickHostWithParser/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Joystick Host Demo (Using HID Descriptor Parser)" ++ ++# 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Host/ClassDriver/JoystickHostWithParser/makefile index 000000000,000000000..cbb44cffc new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/JoystickHostWithParser/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = JoystickHostWithParser ++SRC = $(TARGET).c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) $(LUFA_SRC_SERIAL) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Host/ClassDriver/KeyboardHost/Config/LUFAConfig.h index 000000000,000000000..197122fce new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/KeyboardHost/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++// #define USB_DEVICE_ONLY ++ #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++// #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++// #define FIXED_CONTROL_ENDPOINT_SIZE {Insert Value Here} ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++// #define FIXED_NUM_CONFIGURATIONS {Insert Value Here} ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Host/ClassDriver/KeyboardHost/KeyboardHost.c index 000000000,000000000..57dcdb0ac new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/KeyboardHost/KeyboardHost.c @@@ -1,0 -1,0 +1,244 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 KeyboardHost demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "KeyboardHost.h" ++ ++/** 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_Host_t Keyboard_HID_Interface = ++ { ++ .Config = ++ { ++ .DataINPipe = ++ { ++ .Address = (PIPE_DIR_IN | 1), ++ .Banks = 1, ++ }, ++ .DataOUTPipe = ++ { ++ .Address = (PIPE_DIR_OUT | 2), ++ .Banks = 1, ++ }, ++ .HIDInterfaceProtocol = HID_CSCP_KeyboardBootProtocol, ++ }, ++ }; ++ ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ puts_P(PSTR(ESC_FG_CYAN "Keyboard Host Demo running.\r\n" ESC_FG_WHITE)); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ KeyboardHost_Task(); ++ ++ HID_Host_USBTask(&Keyboard_HID_Interface); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#endif ++ ++ /* Hardware Initialization */ ++ Serial_Init(9600, false); ++ LEDs_Init(); ++ USB_Init(); ++ ++ /* Create a stdio stream for the serial port for stdin and stdout */ ++ Serial_CreateStream(NULL); ++} ++ ++/** Task to manage an enumerated USB keyboard once connected, to display key state ++ * data as it is received. ++ */ ++void KeyboardHost_Task(void) ++{ ++ if (USB_HostState != HOST_STATE_Configured) ++ return; ++ ++ if (HID_Host_IsReportReceived(&Keyboard_HID_Interface)) ++ { ++ USB_KeyboardReport_Data_t KeyboardReport; ++ HID_Host_ReceiveReport(&Keyboard_HID_Interface, &KeyboardReport); ++ ++ LEDs_ChangeLEDs(LEDS_LED1, (KeyboardReport.Modifier) ? LEDS_LED1 : 0); ++ ++ uint8_t KeyCode = KeyboardReport.KeyCode[0]; ++ ++ if (KeyCode) ++ { ++ char PressedKey = 0; ++ ++ LEDs_ToggleLEDs(LEDS_LED2); ++ ++ /* Retrieve pressed key character if alphanumeric */ ++ if ((KeyCode >= HID_KEYBOARD_SC_A) && (KeyCode <= HID_KEYBOARD_SC_Z)) ++ { ++ PressedKey = (KeyCode - HID_KEYBOARD_SC_A) + 'A'; ++ } ++ else if ((KeyCode >= HID_KEYBOARD_SC_1_AND_EXCLAMATION) & ++ (KeyCode < HID_KEYBOARD_SC_0_AND_CLOSING_PARENTHESIS)) ++ { ++ PressedKey = (KeyCode - HID_KEYBOARD_SC_1_AND_EXCLAMATION) + '1'; ++ } ++ else if (KeyCode == HID_KEYBOARD_SC_0_AND_CLOSING_PARENTHESIS) ++ { ++ PressedKey = '0'; ++ } ++ else if (KeyCode == HID_KEYBOARD_SC_SPACE) ++ { ++ PressedKey = ' '; ++ } ++ else if (KeyCode == HID_KEYBOARD_SC_ENTER) ++ { ++ PressedKey = '\n'; ++ } ++ ++ if (PressedKey) ++ putchar(PressedKey); ++ } ++ } ++} ++ ++/** Event handler for the USB_DeviceAttached event. This indicates that a device has been attached to the host, and ++ * starts the library USB task to begin the enumeration and USB management process. ++ */ ++void EVENT_USB_Host_DeviceAttached(void) ++{ ++ puts_P(PSTR("Device Attached.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the USB_DeviceUnattached event. This indicates that a device has been removed from the host, and ++ * stops the library USB task management process. ++ */ ++void EVENT_USB_Host_DeviceUnattached(void) ++{ ++ puts_P(PSTR("\r\nDevice Unattached.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_DeviceEnumerationComplete event. This indicates that a device has been successfully ++ * enumerated by the host and is now ready to be used by the application. ++ */ ++void EVENT_USB_Host_DeviceEnumerationComplete(void) ++{ ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++ ++ uint16_t ConfigDescriptorSize; ++ uint8_t ConfigDescriptorData[512]; ++ ++ if (USB_Host_GetDeviceConfigDescriptor(1, &ConfigDescriptorSize, ConfigDescriptorData, ++ sizeof(ConfigDescriptorData)) != HOST_GETCONFIG_Successful) ++ { ++ puts_P(PSTR("Error Retrieving Configuration Descriptor.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (HID_Host_ConfigurePipes(&Keyboard_HID_Interface, ++ ConfigDescriptorSize, ConfigDescriptorData) != HID_ENUMERROR_NoError) ++ { ++ puts_P(PSTR("Attached Device Not a Valid Keyboard.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (USB_Host_SetDeviceConfiguration(1) != HOST_SENDCONTROL_Successful) ++ { ++ puts_P(PSTR("Error Setting Device Configuration.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (HID_Host_SetBootProtocol(&Keyboard_HID_Interface) != 0) ++ { ++ puts_P(PSTR("Could not Set Boot Protocol Mode.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ puts_P(PSTR("Keyboard Enumerated.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++} ++ ++/** Event handler for the USB_HostError event. This indicates that a hardware error occurred while in host mode. */ ++void EVENT_USB_Host_HostError(const uint8_t ErrorCode) ++{ ++ USB_Disable(); ++ ++ printf_P(PSTR(ESC_FG_RED "Host Mode Error\r\n" ++ " -- Error Code %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ for(;;); ++} ++ ++/** Event handler for the USB_DeviceEnumerationFailed event. This indicates that a problem occurred while ++ * enumerating an attached USB device. ++ */ ++void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode) ++{ ++ printf_P(PSTR(ESC_FG_RED "Dev Enum Error\r\n" ++ " -- Error Code %d\r\n" ++ " -- Sub Error Code %d\r\n" ++ " -- In State %d\r\n" ESC_FG_WHITE), ErrorCode, SubErrorCode, USB_HostState); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++} ++ diff --cc lib/lufa/Demos/Host/ClassDriver/KeyboardHost/KeyboardHost.h index 000000000,000000000..cf04504a4 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/KeyboardHost/KeyboardHost.h @@@ -1,0 -1,0 +1,78 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 KeyboardHost.c. ++ */ ++ ++#ifndef _KEYBOARD_HOST_H_ ++#define _KEYBOARD_HOST_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/pgmspace.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <stdio.h> ++ ++ #include <LUFA/Drivers/Misc/TerminalCodes.h> ++ #include <LUFA/Drivers/Peripheral/Serial.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Platform/Platform.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 KeyboardHost_Task(void); ++ ++ void EVENT_USB_Host_HostError(const uint8_t ErrorCode); ++ void EVENT_USB_Host_DeviceAttached(void); ++ void EVENT_USB_Host_DeviceUnattached(void); ++ void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode); ++ void EVENT_USB_Host_DeviceEnumerationComplete(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/ClassDriver/KeyboardHost/KeyboardHost.txt index 000000000,000000000..49cc672a4 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/KeyboardHost/KeyboardHost.txt @@@ -1,0 -1,0 +1,71 @@@ ++/** \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 Keyboard Host Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * ++ * \section Sec_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>Host</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Class:</b></td> ++ * <td>Human Interface Device (HID)</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>N/A</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF HID Specification, USBIF HID Usage Tables</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Low Speed Mode, Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Keyboard host demonstration application. This gives a simple reference ++ * application for implementing a USB keyboard host, for USB keyboards using ++ * the standard keyboard HID profile. ++ * ++ * Pressed alpha-numeric, enter or space key is transmitted through the serial ++ * USART at serial settings 9600, 8, N, 1. ++ * ++ * This uses a naive method where the keyboard is set to Boot Protocol mode, so ++ * that the report structure is fixed and known. A better implementation ++ * uses the HID report parser for correct report data processing across ++ * all compatible mice with advanced characteristics, as shown in the ++ * KeyboardHostWithParser demo application. ++ * ++ * Currently only single interface keyboards are supported. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Host/ClassDriver/KeyboardHost/asf.xml index 000000000,000000000..46cd71fe7 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/KeyboardHost/asf.xml @@@ -1,0 -1,0 +1,48 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Keyboard HID Host Demo (Class Driver APIs)" id="lufa.demos.host.class.keyboard.example.avr8"> ++ <require idref="lufa.demos.host.class.keyboard"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.host.class.keyboard" caption="Keyboard HID Host Demo (Class Driver APIs)"> ++ <info type="description" value="summary"> ++ Keyboard HID Host demo, implementing a basic USB keyboard host that can display key press data on the board LEDs. This demo uses the user-friendly USB Class Driver APIs to provide a simple, abstracted interface into the USB stack. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Class Driver APIs"/> ++ <keyword value="USB Host"/> ++ <keyword value="HID Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="KeyboardHost.txt"/> ++ ++ <build type="c-source" value="KeyboardHost.c"/> ++ <build type="header-file" value="KeyboardHost.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.peripheral.usart"/> ++ <require idref="lufa.drivers.misc.ansi"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Host/ClassDriver/KeyboardHost/doxyfile index 000000000,000000000..968ab03f1 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/KeyboardHost/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Keyboard Host 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Host/ClassDriver/KeyboardHost/makefile index 000000000,000000000..f3f34d20d new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/KeyboardHost/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = KeyboardHost ++SRC = $(TARGET).c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) $(LUFA_SRC_SERIAL) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Host/ClassDriver/KeyboardHostWithParser/Config/LUFAConfig.h index 000000000,000000000..197122fce new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/KeyboardHostWithParser/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++// #define USB_DEVICE_ONLY ++ #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++// #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++// #define FIXED_CONTROL_ENDPOINT_SIZE {Insert Value Here} ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++// #define FIXED_NUM_CONFIGURATIONS {Insert Value Here} ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Host/ClassDriver/KeyboardHostWithParser/KeyboardHostWithParser.c index 000000000,000000000..ac93ab5c3 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/KeyboardHostWithParser/KeyboardHostWithParser.c @@@ -1,0 -1,0 +1,287 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 KeyboardHostWithParser demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "KeyboardHostWithParser.h" ++ ++/** Processed HID report descriptor items structure, containing information on each HID report element */ ++static HID_ReportInfo_t HIDReportInfo; ++ ++/** 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_Host_t Keyboard_HID_Interface = ++ { ++ .Config = ++ { ++ .DataINPipe = ++ { ++ .Address = (PIPE_DIR_IN | 1), ++ .Banks = 1, ++ }, ++ .DataOUTPipe = ++ { ++ .Address = (PIPE_DIR_OUT | 2), ++ .Banks = 1, ++ }, ++ .HIDInterfaceProtocol = HID_CSCP_NonBootProtocol, ++ .HIDParserData = &HIDReportInfo ++ }, ++ }; ++ ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ puts_P(PSTR(ESC_FG_CYAN "Keyboard Host Demo running.\r\n" ESC_FG_WHITE)); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ KeyboardHost_Task(); ++ ++ HID_Host_USBTask(&Keyboard_HID_Interface); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#endif ++ ++ /* Hardware Initialization */ ++ Serial_Init(9600, false); ++ LEDs_Init(); ++ USB_Init(); ++ ++ /* Create a stdio stream for the serial port for stdin and stdout */ ++ Serial_CreateStream(NULL); ++} ++ ++/** Task to manage an enumerated USB keyboard once connected, to display key state ++ * data as it is received. ++ */ ++void KeyboardHost_Task(void) ++{ ++ if (USB_HostState != HOST_STATE_Configured) ++ return; ++ ++ if (HID_Host_IsReportReceived(&Keyboard_HID_Interface)) ++ { ++ uint8_t KeyboardReport[Keyboard_HID_Interface.State.LargestReportSize]; ++ HID_Host_ReceiveReport(&Keyboard_HID_Interface, &KeyboardReport); ++ ++ for (uint8_t ReportNumber = 0; ReportNumber < HIDReportInfo.TotalReportItems; ReportNumber++) ++ { ++ HID_ReportItem_t* ReportItem = &HIDReportInfo.ReportItems[ReportNumber]; ++ ++ /* Update the report item value if it is contained within the current report */ ++ if (!(USB_GetHIDReportItemInfo(KeyboardReport, ReportItem))) ++ continue; ++ ++ /* Determine what report item is being tested, process updated value as needed */ ++ if ((ReportItem->Attributes.Usage.Page == USAGE_PAGE_KEYBOARD) && ++ (ReportItem->Attributes.BitSize == 8) && ++ (ReportItem->Attributes.Logical.Maximum > 1) && ++ (ReportItem->ItemType == HID_REPORT_ITEM_In)) ++ { ++ /* Key code is an unsigned char in length, cast to the appropriate type */ ++ uint8_t KeyCode = (uint8_t)ReportItem->Value; ++ ++ /* If scan-code is non-zero, a key is being pressed */ ++ if (KeyCode) ++ { ++ /* Toggle status LED to indicate keypress */ ++ LEDs_ToggleLEDs(LEDS_LED2); ++ ++ char PressedKey = 0; ++ ++ /* Convert scan-code to printable character if alphanumeric */ ++ if ((KeyCode >= HID_KEYBOARD_SC_A) && (KeyCode <= HID_KEYBOARD_SC_Z)) ++ { ++ PressedKey = (KeyCode - HID_KEYBOARD_SC_A) + 'A'; ++ } ++ else if ((KeyCode >= HID_KEYBOARD_SC_1_AND_EXCLAMATION) & ++ (KeyCode < HID_KEYBOARD_SC_0_AND_CLOSING_PARENTHESIS)) ++ { ++ PressedKey = (KeyCode - HID_KEYBOARD_SC_1_AND_EXCLAMATION) + '1'; ++ } ++ else if (KeyCode == HID_KEYBOARD_SC_0_AND_CLOSING_PARENTHESIS) ++ { ++ PressedKey = '0'; ++ } ++ else if (KeyCode == HID_KEYBOARD_SC_SPACE) ++ { ++ PressedKey = ' '; ++ } ++ else if (KeyCode == HID_KEYBOARD_SC_ENTER) ++ { ++ PressedKey = '\n'; ++ } ++ ++ /* Print the pressed key character out through the serial port if valid */ ++ if (PressedKey) ++ putchar(PressedKey); ++ } ++ ++ /* Once a scan-code is found, stop scanning through the report items */ ++ break; ++ } ++ } ++ } ++} ++ ++/** Event handler for the USB_DeviceAttached event. This indicates that a device has been attached to the host, and ++ * starts the library USB task to begin the enumeration and USB management process. ++ */ ++void EVENT_USB_Host_DeviceAttached(void) ++{ ++ puts_P(PSTR("Device Attached.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the USB_DeviceUnattached event. This indicates that a device has been removed from the host, and ++ * stops the library USB task management process. ++ */ ++void EVENT_USB_Host_DeviceUnattached(void) ++{ ++ puts_P(PSTR("\r\nDevice Unattached.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_DeviceEnumerationComplete event. This indicates that a device has been successfully ++ * enumerated by the host and is now ready to be used by the application. ++ */ ++void EVENT_USB_Host_DeviceEnumerationComplete(void) ++{ ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++ ++ uint16_t ConfigDescriptorSize; ++ uint8_t ConfigDescriptorData[512]; ++ ++ if (USB_Host_GetDeviceConfigDescriptor(1, &ConfigDescriptorSize, ConfigDescriptorData, ++ sizeof(ConfigDescriptorData)) != HOST_GETCONFIG_Successful) ++ { ++ puts_P(PSTR("Error Retrieving Configuration Descriptor.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (HID_Host_ConfigurePipes(&Keyboard_HID_Interface, ++ ConfigDescriptorSize, ConfigDescriptorData) != HID_ENUMERROR_NoError) ++ { ++ puts_P(PSTR("Attached Device Not a Valid Keyboard.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (USB_Host_SetDeviceConfiguration(1) != HOST_SENDCONTROL_Successful) ++ { ++ puts_P(PSTR("Error Setting Device Configuration.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (HID_Host_SetReportProtocol(&Keyboard_HID_Interface) != 0) ++ { ++ puts_P(PSTR("Error Setting Report Protocol Mode or Not a Valid Keyboard.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ puts_P(PSTR("Keyboard Enumerated.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++} ++ ++/** Event handler for the USB_HostError event. This indicates that a hardware error occurred while in host mode. */ ++void EVENT_USB_Host_HostError(const uint8_t ErrorCode) ++{ ++ USB_Disable(); ++ ++ printf_P(PSTR(ESC_FG_RED "Host Mode Error\r\n" ++ " -- Error Code %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ for(;;); ++} ++ ++/** Event handler for the USB_DeviceEnumerationFailed event. This indicates that a problem occurred while ++ * enumerating an attached USB device. ++ */ ++void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode) ++{ ++ printf_P(PSTR(ESC_FG_RED "Dev Enum Error\r\n" ++ " -- Error Code %d\r\n" ++ " -- Sub Error Code %d\r\n" ++ " -- In State %d\r\n" ESC_FG_WHITE), ErrorCode, SubErrorCode, USB_HostState); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++} ++ ++/** Callback for the HID Report Parser. This function is called each time the HID report parser is about to store ++ * an IN, OUT or FEATURE item into the HIDReportInfo structure. To save on RAM, we are able to filter out items ++ * we aren't interested in (preventing us from being able to extract them later on, but saving on the RAM they would ++ * have occupied). ++ * ++ * \param[in] CurrentItem Pointer to the item the HID report parser is currently working with ++ * ++ * \return Boolean \c true if the item should be stored into the HID report structure, \c false if it should be discarded ++ */ ++bool CALLBACK_HIDParser_FilterHIDReportItem(HID_ReportItem_t* const CurrentItem) ++{ ++ /* Check the attributes of the current item - see if we are interested in it or not; ++ * only store KEYBOARD usage page items into the Processed HID Report structure to ++ * save RAM and ignore the rest ++ */ ++ return (CurrentItem->Attributes.Usage.Page == USAGE_PAGE_KEYBOARD); ++} ++ diff --cc lib/lufa/Demos/Host/ClassDriver/KeyboardHostWithParser/KeyboardHostWithParser.h index 000000000,000000000..2d2a27b09 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/KeyboardHostWithParser/KeyboardHostWithParser.h @@@ -1,0 -1,0 +1,83 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 KeyboardHostWithParser.c. ++ */ ++ ++#ifndef _KEYBOARD_HOST_H_ ++#define _KEYBOARD_HOST_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/pgmspace.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <stdio.h> ++ ++ #include <LUFA/Drivers/Misc/TerminalCodes.h> ++ #include <LUFA/Drivers/Peripheral/Serial.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Platform/Platform.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) ++ ++ /** HID Report Descriptor Usage Page value for a desktop keyboard. */ ++ #define USAGE_PAGE_KEYBOARD 0x07 ++ ++ /* Function Prototypes: */ ++ void SetupHardware(void); ++ void KeyboardHost_Task(void); ++ ++ void EVENT_USB_Host_HostError(const uint8_t ErrorCode); ++ void EVENT_USB_Host_DeviceAttached(void); ++ void EVENT_USB_Host_DeviceUnattached(void); ++ void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode); ++ void EVENT_USB_Host_DeviceEnumerationComplete(void); ++ ++ bool CALLBACK_HIDParser_FilterHIDReportItem(HID_ReportItem_t* const CurrentItem); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/ClassDriver/KeyboardHostWithParser/KeyboardHostWithParser.txt index 000000000,000000000..4c87965ca new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/KeyboardHostWithParser/KeyboardHostWithParser.txt @@@ -1,0 -1,0 +1,71 @@@ ++/** \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 Keyboard Host With HID Descriptor Parser Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * ++ * \section Sec_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>Host</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Class:</b></td> ++ * <td>Human Interface Device (HID)</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>N/A</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF HID Specification \n ++ * USBIF HID Usage Tables</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Low Speed Mode \n ++ * Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Keyboard host demonstration application. This gives a simple reference ++ * application for implementing a USB Keyboard host, for USB keyboards using ++ * the standard Keyboard HID profile. It uses a HID parser for the HID reports, ++ * allowing for correct operation across all USB keyboards. This demo supports ++ * keyboards with a single HID report. ++ * ++ * Pressed alpha-numeric, enter or space key is transmitted through the serial ++ * USART at serial settings 9600, 8, N, 1. On connection to a USB keyboard, the ++ * report items will be processed and printed as a formatted list through the ++ * USART before the keyboard is fully enumerated. ++ * ++ * Currently only single interface keyboards are supported. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Host/ClassDriver/KeyboardHostWithParser/asf.xml index 000000000,000000000..924299f2f new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/KeyboardHostWithParser/asf.xml @@@ -1,0 -1,0 +1,48 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Keyboard HID (with parser) Host Demo (Class Driver APIs)" id="lufa.demos.host.class.keyboard_parser.example.avr8"> ++ <require idref="lufa.demos.host.class.keyboard_parser"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.host.class.keyboard_parser" caption="Keyboard HID (with parser) Host Demo (Class Driver APIs)"> ++ <info type="description" value="summary"> ++ Keyboard HID Host demo with HID parser, implementing a basic USB keyboard host that can display key press data on the board LEDs. This demo uses the user-friendly USB Class Driver APIs to provide a simple, abstracted interface into the USB stack. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Class Driver APIs"/> ++ <keyword value="USB Host"/> ++ <keyword value="HID Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="KeyboardHostWithParser.txt"/> ++ ++ <build type="c-source" value="KeyboardHostWithParser.c"/> ++ <build type="header-file" value="KeyboardHostWithParser.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.peripheral.usart"/> ++ <require idref="lufa.drivers.misc.ansi"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Host/ClassDriver/KeyboardHostWithParser/doxyfile index 000000000,000000000..084a65242 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/KeyboardHostWithParser/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Keyboard Host Demo (Using HID Descriptor Parser)" ++ ++# 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Host/ClassDriver/KeyboardHostWithParser/makefile index 000000000,000000000..f14d332a3 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/KeyboardHostWithParser/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = KeyboardHostWithParser ++SRC = $(TARGET).c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) $(LUFA_SRC_SERIAL) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Host/ClassDriver/MIDIHost/Config/LUFAConfig.h index 000000000,000000000..197122fce new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/MIDIHost/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++// #define USB_DEVICE_ONLY ++ #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++// #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++// #define FIXED_CONTROL_ENDPOINT_SIZE {Insert Value Here} ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++// #define FIXED_NUM_CONFIGURATIONS {Insert Value Here} ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Host/ClassDriver/MIDIHost/MIDIHost.c index 000000000,000000000..a220eae64 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/MIDIHost/MIDIHost.c @@@ -1,0 -1,0 +1,272 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 MIDIHost demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "MIDIHost.h" ++ ++/** LUFA MIDI Class driver interface configuration and state information. This structure is ++ * passed to all MIDI Class driver functions, so that multiple instances of the same class ++ * within a device can be differentiated from one another. ++ */ ++USB_ClassInfo_MIDI_Host_t Keyboard_MIDI_Interface = ++ { ++ .Config = ++ { ++ .DataINPipe = ++ { ++ .Address = (PIPE_DIR_IN | 1), ++ .Banks = 1, ++ }, ++ .DataOUTPipe = ++ { ++ .Address = (PIPE_DIR_OUT | 2), ++ .Banks = 1, ++ }, ++ }, ++ }; ++ ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ puts_P(PSTR(ESC_FG_CYAN "MIDI Host Demo running.\r\n" ESC_FG_WHITE)); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ JoystickHost_Task(); ++ ++ MIDI_Host_USBTask(&Keyboard_MIDI_Interface); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#endif ++ ++ /* Hardware Initialization */ ++ Serial_Init(9600, false); ++ LEDs_Init(); ++ Buttons_Init(); ++ Joystick_Init(); ++ USB_Init(); ++ ++ /* Create a stdio stream for the serial port for stdin and stdout */ ++ Serial_CreateStream(NULL); ++} ++ ++/** Task to manage an enumerated USB MIDI device once connected, to display received ++ * note events from the host and send note changes in response to the board's joystick. ++ */ ++void JoystickHost_Task(void) ++{ ++ if (USB_HostState != HOST_STATE_Configured) ++ return; ++ ++ MIDI_EventPacket_t MIDIEvent; ++ while (MIDI_Host_ReceiveEventPacket(&Keyboard_MIDI_Interface, &MIDIEvent)) ++ { ++ bool NoteOnEvent = (MIDIEvent.Event == MIDI_EVENT(0, MIDI_COMMAND_NOTE_ON)); ++ bool NoteOffEvent = (MIDIEvent.Event == MIDI_EVENT(0, MIDI_COMMAND_NOTE_OFF)); ++ ++ /* Display note events from the host */ ++ if (NoteOnEvent || NoteOffEvent) ++ { ++ printf_P(PSTR("MIDI Note %s - Channel %d, Pitch %d, Velocity %d\r\n"), NoteOnEvent ? "On" : "Off", ++ ((MIDIEvent.Data1 & 0x0F) + 1), ++ MIDIEvent.Data2, MIDIEvent.Data3); ++ } ++ } ++ ++ CheckJoystickMovement(); ++} ++ ++/** Checks for movement of the board's joystick, and sends corresponding MIDI note on/off ++ * messages to the host. ++ */ ++void CheckJoystickMovement(void) ++{ ++ static uint8_t PrevJoystickStatus; ++ ++ uint8_t MIDICommand = 0; ++ uint8_t MIDIPitch; ++ ++ /* Get current joystick mask, XOR with previous to detect joystick changes */ ++ uint8_t JoystickStatus = Joystick_GetStatus(); ++ uint8_t JoystickChanges = (JoystickStatus ^ PrevJoystickStatus); ++ ++ /* Get board button status - if pressed use channel 10 (percussion), otherwise use channel 1 */ ++ uint8_t Channel = ((Buttons_GetStatus() & BUTTONS_BUTTON1) ? MIDI_CHANNEL(10) : MIDI_CHANNEL(1)); ++ ++ if (JoystickChanges & JOY_LEFT) ++ { ++ MIDICommand = ((JoystickStatus & JOY_LEFT)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF); ++ MIDIPitch = 0x3C; ++ } ++ else if (JoystickChanges & JOY_UP) ++ { ++ MIDICommand = ((JoystickStatus & JOY_UP)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF); ++ MIDIPitch = 0x3D; ++ } ++ else if (JoystickChanges & JOY_RIGHT) ++ { ++ MIDICommand = ((JoystickStatus & JOY_RIGHT)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF); ++ MIDIPitch = 0x3E; ++ } ++ else if (JoystickChanges & JOY_DOWN) ++ { ++ MIDICommand = ((JoystickStatus & JOY_DOWN)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF); ++ MIDIPitch = 0x3F; ++ } ++ else if (JoystickChanges & JOY_PRESS) ++ { ++ MIDICommand = ((JoystickStatus & JOY_PRESS)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF); ++ MIDIPitch = 0x3B; ++ } ++ ++ if (MIDICommand) ++ { ++ MIDI_EventPacket_t MIDIEvent = (MIDI_EventPacket_t) ++ { ++ .Event = MIDI_EVENT(0, MIDICommand), ++ ++ .Data1 = MIDICommand | Channel, ++ .Data2 = MIDIPitch, ++ .Data3 = MIDI_STANDARD_VELOCITY, ++ }; ++ ++ MIDI_Host_SendEventPacket(&Keyboard_MIDI_Interface, &MIDIEvent); ++ MIDI_Host_Flush(&Keyboard_MIDI_Interface); ++ } ++ ++ PrevJoystickStatus = JoystickStatus; ++} ++ ++/** Event handler for the USB_DeviceAttached event. This indicates that a device has been attached to the host, and ++ * starts the library USB task to begin the enumeration and USB management process. ++ */ ++void EVENT_USB_Host_DeviceAttached(void) ++{ ++ puts_P(PSTR("Device Attached.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the USB_DeviceUnattached event. This indicates that a device has been removed from the host, and ++ * stops the library USB task management process. ++ */ ++void EVENT_USB_Host_DeviceUnattached(void) ++{ ++ puts_P(PSTR("\r\nDevice Unattached.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_DeviceEnumerationComplete event. This indicates that a device has been successfully ++ * enumerated by the host and is now ready to be used by the application. ++ */ ++void EVENT_USB_Host_DeviceEnumerationComplete(void) ++{ ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++ ++ uint16_t ConfigDescriptorSize; ++ uint8_t ConfigDescriptorData[512]; ++ ++ if (USB_Host_GetDeviceConfigDescriptor(1, &ConfigDescriptorSize, ConfigDescriptorData, ++ sizeof(ConfigDescriptorData)) != HOST_GETCONFIG_Successful) ++ { ++ puts_P(PSTR("Error Retrieving Configuration Descriptor.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (MIDI_Host_ConfigurePipes(&Keyboard_MIDI_Interface, ++ ConfigDescriptorSize, ConfigDescriptorData) != MIDI_ENUMERROR_NoError) ++ { ++ puts_P(PSTR("Attached Device Not a Valid MIDI Class Device.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (USB_Host_SetDeviceConfiguration(1) != HOST_SENDCONTROL_Successful) ++ { ++ puts_P(PSTR("Error Setting Device Configuration.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ puts_P(PSTR("MIDI Device Enumerated.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++} ++ ++/** Event handler for the USB_HostError event. This indicates that a hardware error occurred while in host mode. */ ++void EVENT_USB_Host_HostError(const uint8_t ErrorCode) ++{ ++ USB_Disable(); ++ ++ printf_P(PSTR(ESC_FG_RED "Host Mode Error\r\n" ++ " -- Error Code %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ for(;;); ++} ++ ++/** Event handler for the USB_DeviceEnumerationFailed event. This indicates that a problem occurred while ++ * enumerating an attached USB device. ++ */ ++void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode) ++{ ++ printf_P(PSTR(ESC_FG_RED "Dev Enum Error\r\n" ++ " -- Error Code %d\r\n" ++ " -- Sub Error Code %d\r\n" ++ " -- In State %d\r\n" ESC_FG_WHITE), ErrorCode, SubErrorCode, USB_HostState); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++} ++ diff --cc lib/lufa/Demos/Host/ClassDriver/MIDIHost/MIDIHost.h index 000000000,000000000..6667716ba new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/MIDIHost/MIDIHost.h @@@ -1,0 -1,0 +1,81 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 MIDIHost.c. ++ */ ++ ++#ifndef _MIDI_HOST_H_ ++#define _MIDI_HOST_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/pgmspace.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <stdio.h> ++ ++ #include <LUFA/Drivers/Misc/TerminalCodes.h> ++ #include <LUFA/Drivers/Peripheral/Serial.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/Board/Buttons.h> ++ #include <LUFA/Drivers/Board/Joystick.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Platform/Platform.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 JoystickHost_Task(void); ++ ++ void EVENT_USB_Host_HostError(const uint8_t ErrorCode); ++ void EVENT_USB_Host_DeviceAttached(void); ++ void EVENT_USB_Host_DeviceUnattached(void); ++ void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode); ++ void EVENT_USB_Host_DeviceEnumerationComplete(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/ClassDriver/MIDIHost/MIDIHost.txt index 000000000,000000000..33a8319f0 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/MIDIHost/MIDIHost.txt @@@ -1,0 -1,0 +1,60 @@@ ++/** \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 MIDI Host Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * ++ * \section Sec_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>Host</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Class:</b></td> ++ * <td>Audio Class Device</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>MIDI Subclass</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF USB MIDI Audio Class Standard</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * MIDI host demonstration application. This demo will enumerate an attached USB-MIDI device, and print incoming MIDI note ++ * on and off messages on any channel to the serial port. Pressing the board joystick will send note on and off messages to ++ * the attached MIDI device, with the board HWB controlling the note channel. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Host/ClassDriver/MIDIHost/asf.xml index 000000000,000000000..140c03ba7 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/MIDIHost/asf.xml @@@ -1,0 -1,0 +1,50 @@@ ++<asf xmlversion="1.0"> ++ <project caption="MIDI Host Demo (Class Driver APIs)" id="lufa.demos.host.class.midi.example.avr8"> ++ <require idref="lufa.demos.host.class.midi"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.host.class.midi" caption="MIDI Host Demo (Class Driver APIs)"> ++ <info type="description" value="summary"> ++ MIDI Host demo, capable of sending and receiving MIDI messages to and from an attached device. This demo uses the user-friendly USB Class Driver APIs to provide a simple, abstracted interface into the USB stack. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Class Driver APIs"/> ++ <keyword value="USB Host"/> ++ <keyword value="MIDI Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="MIDIHost.txt"/> ++ ++ <build type="c-source" value="MIDIHost.c"/> ++ <build type="header-file" value="MIDIHost.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.peripheral.usart"/> ++ <require idref="lufa.drivers.misc.ansi"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ <require idref="lufa.drivers.board.buttons"/> ++ <require idref="lufa.drivers.board.joystick"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Host/ClassDriver/MIDIHost/doxyfile index 000000000,000000000..7a6906a27 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/MIDIHost/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - MIDI Host 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Host/ClassDriver/MIDIHost/makefile index 000000000,000000000..2ed4e4bd5 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/MIDIHost/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = MIDIHost ++SRC = $(TARGET).c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) $(LUFA_SRC_SERIAL) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Host/ClassDriver/MassStorageHost/Config/LUFAConfig.h index 000000000,000000000..e2b5166f2 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/MassStorageHost/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++// #define USB_DEVICE_ONLY ++ #define USB_HOST_ONLY ++ #define USB_STREAM_TIMEOUT_MS 5000 ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++// #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++// #define FIXED_CONTROL_ENDPOINT_SIZE {Insert Value Here} ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++// #define FIXED_NUM_CONFIGURATIONS {Insert Value Here} ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Host/ClassDriver/MassStorageHost/MassStorageHost.c index 000000000,000000000..62a4071c3 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/MassStorageHost/MassStorageHost.c @@@ -1,0 -1,0 +1,311 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 MassStorageHost demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "MassStorageHost.h" ++ ++/** LUFA Mass Storage Class driver interface configuration and state information. This structure is ++ * passed to all Mass Storage Class driver functions, so that multiple instances of the same class ++ * within a device can be differentiated from one another. ++ */ ++USB_ClassInfo_MS_Host_t FlashDisk_MS_Interface = ++ { ++ .Config = ++ { ++ .DataINPipe = ++ { ++ .Address = (PIPE_DIR_IN | 1), ++ .Banks = 1, ++ }, ++ .DataOUTPipe = ++ { ++ .Address = (PIPE_DIR_OUT | 2), ++ .Banks = 1, ++ }, ++ }, ++ }; ++ ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ puts_P(PSTR(ESC_FG_CYAN "Mass Storage Host Demo running.\r\n" ESC_FG_WHITE)); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ MassStorageHost_Task(); ++ ++ MS_Host_USBTask(&FlashDisk_MS_Interface); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#endif ++ ++ /* Hardware Initialization */ ++ Serial_Init(9600, false); ++ LEDs_Init(); ++ USB_Init(); ++ ++ /* Create a stdio stream for the serial port for stdin and stdout */ ++ Serial_CreateStream(NULL); ++} ++ ++/** Task to manage an enumerated USB Mass Storage device once connected, to print out ++ * data from the device. ++ */ ++void MassStorageHost_Task(void) ++{ ++ if (USB_HostState != HOST_STATE_Configured) ++ return; ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_BUSY); ++ ++ puts_P(PSTR("Waiting until ready...\r\n")); ++ ++ for (;;) ++ { ++ uint8_t ErrorCode = MS_Host_TestUnitReady(&FlashDisk_MS_Interface, 0); ++ ++ if (!(ErrorCode)) ++ break; ++ ++ /* Check if an error other than a logical command error (device busy) received */ ++ if (ErrorCode != MS_ERROR_LOGICAL_CMD_FAILED) ++ { ++ puts_P(PSTR("Error waiting for device to be ready.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ } ++ ++ puts_P(PSTR("Retrieving Capacity...\r\n")); ++ ++ SCSI_Capacity_t DiskCapacity; ++ if (MS_Host_ReadDeviceCapacity(&FlashDisk_MS_Interface, 0, &DiskCapacity)) ++ { ++ puts_P(PSTR("Error retrieving device capacity.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ printf_P(PSTR("%lu blocks of %lu bytes.\r\n"), DiskCapacity.Blocks, DiskCapacity.BlockSize); ++ ++ uint8_t BlockBuffer[DiskCapacity.BlockSize]; ++ ++ if (MS_Host_ReadDeviceBlocks(&FlashDisk_MS_Interface, 0, 0x00000000, 1, DiskCapacity.BlockSize, BlockBuffer)) ++ { ++ puts_P(PSTR("Error reading device block.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ puts_P(PSTR("\r\nContents of first block:\r\n")); ++ ++ for (uint16_t Chunk = 0; Chunk < (DiskCapacity.BlockSize >> 4); Chunk++) ++ { ++ uint8_t* ChunkPtr = &BlockBuffer[Chunk << 4]; ++ ++ /* Print out the 16 bytes of the chunk in HEX format */ ++ for (uint8_t ByteOffset = 0; ByteOffset < (1 << 4); ByteOffset++) ++ { ++ char CurrByte = *(ChunkPtr + ByteOffset); ++ printf_P(PSTR("%.2X "), CurrByte); ++ } ++ ++ printf_P(PSTR(" ")); ++ ++ /* Print out the 16 bytes of the chunk in ASCII format */ ++ for (uint8_t ByteOffset = 0; ByteOffset < (1 << 4); ByteOffset++) ++ { ++ char CurrByte = *(ChunkPtr + ByteOffset); ++ putchar(isprint(CurrByte) ? CurrByte : '.'); ++ } ++ ++ printf_P(PSTR("\r\n")); ++ } ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++ USB_Host_SetDeviceConfiguration(0); ++} ++ ++/** Event handler for the USB_DeviceAttached event. This indicates that a device has been attached to the host, and ++ * starts the library USB task to begin the enumeration and USB management process. ++ */ ++void EVENT_USB_Host_DeviceAttached(void) ++{ ++ puts_P(PSTR("Device Attached.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the USB_DeviceUnattached event. This indicates that a device has been removed from the host, and ++ * stops the library USB task management process. ++ */ ++void EVENT_USB_Host_DeviceUnattached(void) ++{ ++ puts_P(PSTR("\r\nDevice Unattached.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_DeviceEnumerationComplete event. This indicates that a device has been successfully ++ * enumerated by the host and is now ready to be used by the application. ++ */ ++void EVENT_USB_Host_DeviceEnumerationComplete(void) ++{ ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++ ++ uint16_t ConfigDescriptorSize; ++ uint8_t ConfigDescriptorData[512]; ++ ++ if (USB_Host_GetDeviceConfigDescriptor(1, &ConfigDescriptorSize, ConfigDescriptorData, ++ sizeof(ConfigDescriptorData)) != HOST_GETCONFIG_Successful) ++ { ++ puts_P(PSTR("Error Retrieving Configuration Descriptor.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (MS_Host_ConfigurePipes(&FlashDisk_MS_Interface, ++ ConfigDescriptorSize, ConfigDescriptorData) != MS_ENUMERROR_NoError) ++ { ++ puts_P(PSTR("Attached Device Not a Valid Mass Storage Device.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (USB_Host_SetDeviceConfiguration(1) != HOST_SENDCONTROL_Successful) ++ { ++ puts_P(PSTR("Error Setting Device Configuration.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ uint8_t MaxLUNIndex; ++ if (MS_Host_GetMaxLUN(&FlashDisk_MS_Interface, &MaxLUNIndex)) ++ { ++ puts_P(PSTR("Error retrieving max LUN index.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ printf_P(PSTR("Total LUNs: %d - Using first LUN in device.\r\n"), (MaxLUNIndex + 1)); ++ ++ if (MS_Host_ResetMSInterface(&FlashDisk_MS_Interface)) ++ { ++ puts_P(PSTR("Error resetting Mass Storage interface.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ SCSI_Request_Sense_Response_t SenseData; ++ if (MS_Host_RequestSense(&FlashDisk_MS_Interface, 0, &SenseData) != 0) ++ { ++ puts_P(PSTR("Error retrieving device sense.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ if (MS_Host_PreventAllowMediumRemoval(&FlashDisk_MS_Interface, 0, true)) ++ { ++ puts_P(PSTR("Error setting Prevent Device Removal bit.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ SCSI_Inquiry_Response_t InquiryData; ++ if (MS_Host_GetInquiryData(&FlashDisk_MS_Interface, 0, &InquiryData)) ++ { ++ puts_P(PSTR("Error retrieving device Inquiry data.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ printf_P(PSTR("Vendor \"%.8s\", Product \"%.16s\"\r\n"), InquiryData.VendorID, InquiryData.ProductID); ++ ++ puts_P(PSTR("Mass Storage Device Enumerated.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++} ++ ++/** Event handler for the USB_HostError event. This indicates that a hardware error occurred while in host mode. */ ++void EVENT_USB_Host_HostError(const uint8_t ErrorCode) ++{ ++ USB_Disable(); ++ ++ printf_P(PSTR(ESC_FG_RED "Host Mode Error\r\n" ++ " -- Error Code %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ for(;;); ++} ++ ++/** Event handler for the USB_DeviceEnumerationFailed event. This indicates that a problem occurred while ++ * enumerating an attached USB device. ++ */ ++void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode) ++{ ++ printf_P(PSTR(ESC_FG_RED "Dev Enum Error\r\n" ++ " -- Error Code %d\r\n" ++ " -- Sub Error Code %d\r\n" ++ " -- In State %d\r\n" ESC_FG_WHITE), ErrorCode, SubErrorCode, USB_HostState); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++} ++ diff --cc lib/lufa/Demos/Host/ClassDriver/MassStorageHost/MassStorageHost.h index 000000000,000000000..088f5c140 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/MassStorageHost/MassStorageHost.h @@@ -1,0 -1,0 +1,82 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 MassStorage.c. ++ */ ++ ++#ifndef _MASS_STORAGE_HOST_H_ ++#define _MASS_STORAGE_HOST_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/pgmspace.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <ctype.h> ++ #include <stdio.h> ++ ++ #include <LUFA/Drivers/Misc/TerminalCodes.h> ++ #include <LUFA/Drivers/Peripheral/Serial.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Platform/Platform.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) ++ ++ /** LED mask for the library LED driver, to indicate that the USB interface is busy. */ ++ #define LEDMASK_USB_BUSY LEDS_LED2 ++ ++ /* Function Prototypes: */ ++ void SetupHardware(void); ++ void MassStorageHost_Task(void); ++ ++ void EVENT_USB_Host_HostError(const uint8_t ErrorCode); ++ void EVENT_USB_Host_DeviceAttached(void); ++ void EVENT_USB_Host_DeviceUnattached(void); ++ void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode); ++ void EVENT_USB_Host_DeviceEnumerationComplete(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/ClassDriver/MassStorageHost/MassStorageHost.txt index 000000000,000000000..4b07261c4 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/MassStorageHost/MassStorageHost.txt @@@ -1,0 -1,0 +1,68 @@@ ++/** \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 Mass Storage Host Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * ++ * \section Sec_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>Host</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Class:</b></td> ++ * <td>Mass Storage Device</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>Bulk Only</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF Mass Storage Standard \n ++ * USB Bulk-Only Transport Standard \n ++ * SCSI Primary Commands Specification \n ++ * SCSI Block Commands Specification</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Mass Storage host demonstration application. This gives a simple reference ++ * application for implementing a USB Mass Storage host, for USB storage devices ++ * using the standard Mass Storage USB profile. ++ * ++ * The first 512 bytes (boot sector) of an attached disk's memory will be dumped ++ * out of the serial port in HEX and ASCII form when it is attached to the AT90USB1287 ++ * AVR. The device will then wait for HWB to be pressed, whereupon the entire ASCII contents ++ * of the disk will be dumped to the serial port. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Host/ClassDriver/MassStorageHost/asf.xml index 000000000,000000000..54bfe50cc new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/MassStorageHost/asf.xml @@@ -1,0 -1,0 +1,48 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Mass Storage Host Demo (Class Driver APIs)" id="lufa.demos.host.class.ms.example.avr8"> ++ <require idref="lufa.demos.host.class.ms"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.host.class.ms" caption="Mass Storage Host Demo (Class Driver APIs)"> ++ <info type="description" value="summary"> ++ Mass Storage Host demo, capable of reading and writing raw 512 byte segments to the device's serial port. This demo uses the user-friendly USB Class Driver APIs to provide a simple, abstracted interface into the USB stack. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Class Driver APIs"/> ++ <keyword value="USB Host"/> ++ <keyword value="Mass Storage Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="MassStorageHost.txt"/> ++ ++ <build type="c-source" value="MassStorageHost.c"/> ++ <build type="header-file" value="MassStorageHost.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.peripheral.usart"/> ++ <require idref="lufa.drivers.misc.ansi"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Host/ClassDriver/MassStorageHost/doxyfile index 000000000,000000000..58657165c new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/MassStorageHost/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Mass Storage Host 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Host/ClassDriver/MassStorageHost/makefile index 000000000,000000000..2423ff4ca new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/MassStorageHost/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = MassStorageHost ++SRC = $(TARGET).c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) $(LUFA_SRC_SERIAL) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Host/ClassDriver/MouseHost/Config/LUFAConfig.h index 000000000,000000000..197122fce new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/MouseHost/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++// #define USB_DEVICE_ONLY ++ #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++// #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++// #define FIXED_CONTROL_ENDPOINT_SIZE {Insert Value Here} ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++// #define FIXED_NUM_CONFIGURATIONS {Insert Value Here} ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Host/ClassDriver/MouseHost/MouseHost.c index 000000000,000000000..ffcdc4754 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/MouseHost/MouseHost.c @@@ -1,0 -1,0 +1,227 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 MouseHost demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "MouseHost.h" ++ ++/** 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_Host_t Mouse_HID_Interface = ++ { ++ .Config = ++ { ++ .DataINPipe = ++ { ++ .Address = (PIPE_DIR_IN | 1), ++ .Banks = 1, ++ }, ++ .DataOUTPipe = ++ { ++ .Address = (PIPE_DIR_OUT | 2), ++ .Banks = 1, ++ }, ++ .HIDInterfaceProtocol = HID_CSCP_MouseBootProtocol, ++ }, ++ }; ++ ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ puts_P(PSTR(ESC_FG_CYAN "Mouse Host Demo running.\r\n" ESC_FG_WHITE)); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ MouseHost_Task(); ++ ++ HID_Host_USBTask(&Mouse_HID_Interface); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#endif ++ ++ /* Hardware Initialization */ ++ Serial_Init(9600, false); ++ LEDs_Init(); ++ USB_Init(); ++ ++ /* Create a stdio stream for the serial port for stdin and stdout */ ++ Serial_CreateStream(NULL); ++} ++ ++/** Task to manage an enumerated USB mouse once connected, to display movement ++ * data as it is received. ++ */ ++void MouseHost_Task(void) ++{ ++ if (USB_HostState != HOST_STATE_Configured) ++ return; ++ ++ if (HID_Host_IsReportReceived(&Mouse_HID_Interface)) ++ { ++ uint8_t LEDMask = LEDS_NO_LEDS; ++ ++ USB_MouseReport_Data_t MouseReport; ++ HID_Host_ReceiveReport(&Mouse_HID_Interface, &MouseReport); ++ ++ printf_P(PSTR("dX:%2d dY:%2d Button:%d\r\n"), MouseReport.X, ++ MouseReport.Y, ++ MouseReport.Button); ++ if (MouseReport.X > 0) ++ LEDMask |= LEDS_LED1; ++ else if (MouseReport.X < 0) ++ LEDMask |= LEDS_LED2; ++ ++ if (MouseReport.Y > 0) ++ LEDMask |= LEDS_LED3; ++ else if (MouseReport.Y < 0) ++ LEDMask |= LEDS_LED4; ++ ++ if (MouseReport.Button) ++ LEDMask = LEDS_ALL_LEDS; ++ ++ LEDs_SetAllLEDs(LEDMask); ++ } ++} ++ ++/** Event handler for the USB_DeviceAttached event. This indicates that a device has been attached to the host, and ++ * starts the library USB task to begin the enumeration and USB management process. ++ */ ++void EVENT_USB_Host_DeviceAttached(void) ++{ ++ puts_P(PSTR("Device Attached.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the USB_DeviceUnattached event. This indicates that a device has been removed from the host, and ++ * stops the library USB task management process. ++ */ ++void EVENT_USB_Host_DeviceUnattached(void) ++{ ++ puts_P(PSTR("\r\nDevice Unattached.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_DeviceEnumerationComplete event. This indicates that a device has been successfully ++ * enumerated by the host and is now ready to be used by the application. ++ */ ++void EVENT_USB_Host_DeviceEnumerationComplete(void) ++{ ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++ ++ uint16_t ConfigDescriptorSize; ++ uint8_t ConfigDescriptorData[512]; ++ ++ if (USB_Host_GetDeviceConfigDescriptor(1, &ConfigDescriptorSize, ConfigDescriptorData, ++ sizeof(ConfigDescriptorData)) != HOST_GETCONFIG_Successful) ++ { ++ puts_P(PSTR("Error Retrieving Configuration Descriptor.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (HID_Host_ConfigurePipes(&Mouse_HID_Interface, ++ ConfigDescriptorSize, ConfigDescriptorData) != HID_ENUMERROR_NoError) ++ { ++ puts_P(PSTR("Attached Device Not a Valid Mouse.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (USB_Host_SetDeviceConfiguration(1) != HOST_SENDCONTROL_Successful) ++ { ++ puts_P(PSTR("Error Setting Device Configuration.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (HID_Host_SetBootProtocol(&Mouse_HID_Interface) != 0) ++ { ++ puts_P(PSTR("Could not Set Boot Protocol Mode.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ puts_P(PSTR("Mouse Enumerated.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++} ++ ++/** Event handler for the USB_HostError event. This indicates that a hardware error occurred while in host mode. */ ++void EVENT_USB_Host_HostError(const uint8_t ErrorCode) ++{ ++ USB_Disable(); ++ ++ printf_P(PSTR(ESC_FG_RED "Host Mode Error\r\n" ++ " -- Error Code %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ for(;;); ++} ++ ++/** Event handler for the USB_DeviceEnumerationFailed event. This indicates that a problem occurred while ++ * enumerating an attached USB device. ++ */ ++void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode) ++{ ++ printf_P(PSTR(ESC_FG_RED "Dev Enum Error\r\n" ++ " -- Error Code %d\r\n" ++ " -- Sub Error Code %d\r\n" ++ " -- In State %d\r\n" ESC_FG_WHITE), ErrorCode, SubErrorCode, USB_HostState); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++} ++ diff --cc lib/lufa/Demos/Host/ClassDriver/MouseHost/MouseHost.h index 000000000,000000000..e167e0b78 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/MouseHost/MouseHost.h @@@ -1,0 -1,0 +1,78 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 MouseHost.c. ++ */ ++ ++#ifndef _MOUSE_HOST_H_ ++#define _MOUSE_HOST_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/pgmspace.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <stdio.h> ++ ++ #include <LUFA/Drivers/Misc/TerminalCodes.h> ++ #include <LUFA/Drivers/Peripheral/Serial.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Platform/Platform.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 MouseHost_Task(void); ++ ++ void EVENT_USB_Host_HostError(const uint8_t ErrorCode); ++ void EVENT_USB_Host_DeviceAttached(void); ++ void EVENT_USB_Host_DeviceUnattached(void); ++ void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode); ++ void EVENT_USB_Host_DeviceEnumerationComplete(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/ClassDriver/MouseHost/MouseHost.txt index 000000000,000000000..29364537b new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/MouseHost/MouseHost.txt @@@ -1,0 -1,0 +1,74 @@@ ++/** \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 Mouse Host Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * ++ * \section Sec_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>Host</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Class:</b></td> ++ * <td>Human Interface Device (HID)</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>N/A</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF HID Specification \n ++ * USBIF HID Usage Tables</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Low Speed Mode \n ++ * Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Mouse host demonstration application. This gives a simple reference ++ * application for implementing a USB Mouse host, for USB mice using ++ * the standard mouse HID profile. ++ * ++ * Mouse movement and button presses are displayed on the board LEDs, ++ * as well as printed out the serial terminal as formatted dY, dY and ++ * button status information. ++ * ++ * This uses a naive method where the mouse is set to Boot Protocol mode, so ++ * that the report structure is fixed and known. A better implementation ++ * uses the HID report parser for correct report data processing across ++ * all compatible mice with advanced characteristics, as shown in the ++ * MouseHostWithParser demo application. ++ * ++ * Currently only single interface mice are supported. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Host/ClassDriver/MouseHost/asf.xml index 000000000,000000000..b28860771 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/MouseHost/asf.xml @@@ -1,0 -1,0 +1,48 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Mouse HID Host Demo (Class Driver APIs)" id="lufa.demos.host.class.mouse.example.avr8"> ++ <require idref="lufa.demos.host.class.mouse"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.host.class.mouse" caption="Mouse HID Host Demo (Class Driver APIs)"> ++ <info type="description" value="summary"> ++ Mouse HID Host demo, implementing a basic USB mouse host that can display movement data on the board LEDs. This demo uses the user-friendly USB Class Driver APIs to provide a simple, abstracted interface into the USB stack. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Class Driver APIs"/> ++ <keyword value="USB Host"/> ++ <keyword value="HID Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="MouseHost.txt"/> ++ ++ <build type="c-source" value="MouseHost.c"/> ++ <build type="header-file" value="MouseHost.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.peripheral.usart"/> ++ <require idref="lufa.drivers.misc.ansi"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Host/ClassDriver/MouseHost/doxyfile index 000000000,000000000..a025dd58d new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/MouseHost/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Mouse Host 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Host/ClassDriver/MouseHost/makefile index 000000000,000000000..feb16f583 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/MouseHost/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = MouseHost ++SRC = $(TARGET).c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) $(LUFA_SRC_SERIAL) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Host/ClassDriver/MouseHostWithParser/Config/LUFAConfig.h index 000000000,000000000..197122fce new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/MouseHostWithParser/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++// #define USB_DEVICE_ONLY ++ #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++// #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++// #define FIXED_CONTROL_ENDPOINT_SIZE {Insert Value Here} ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++// #define FIXED_NUM_CONFIGURATIONS {Insert Value Here} ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Host/ClassDriver/MouseHostWithParser/MouseHostWithParser.c index 000000000,000000000..e4d8a0f08 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/MouseHostWithParser/MouseHostWithParser.c @@@ -1,0 -1,0 +1,300 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 MouseHostWithParser demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "MouseHostWithParser.h" ++ ++/** Processed HID report descriptor items structure, containing information on each HID report element */ ++static HID_ReportInfo_t HIDReportInfo; ++ ++/** 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_Host_t Mouse_HID_Interface = ++ { ++ .Config = ++ { ++ .DataINPipe = ++ { ++ .Address = (PIPE_DIR_IN | 1), ++ .Banks = 1, ++ }, ++ .DataOUTPipe = ++ { ++ .Address = (PIPE_DIR_OUT | 2), ++ .Banks = 1, ++ }, ++ .HIDInterfaceProtocol = HID_CSCP_NonBootProtocol, ++ .HIDParserData = &HIDReportInfo ++ }, ++ }; ++ ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ puts_P(PSTR(ESC_FG_CYAN "Mouse Host Demo running.\r\n" ESC_FG_WHITE)); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ MouseHost_Task(); ++ ++ HID_Host_USBTask(&Mouse_HID_Interface); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#endif ++ ++ /* Hardware Initialization */ ++ Serial_Init(9600, false); ++ LEDs_Init(); ++ USB_Init(); ++ ++ /* Create a stdio stream for the serial port for stdin and stdout */ ++ Serial_CreateStream(NULL); ++} ++ ++/** Task to manage an enumerated USB mouse once connected, to display movement ++ * data as it is received. ++ */ ++void MouseHost_Task(void) ++{ ++ if (USB_HostState != HOST_STATE_Configured) ++ return; ++ ++ if (HID_Host_IsReportReceived(&Mouse_HID_Interface)) ++ { ++ uint8_t MouseReport[Mouse_HID_Interface.State.LargestReportSize]; ++ HID_Host_ReceiveReport(&Mouse_HID_Interface, &MouseReport); ++ ++ uint8_t LEDMask = LEDS_NO_LEDS; ++ ++ for (uint8_t ReportNumber = 0; ReportNumber < HIDReportInfo.TotalReportItems; ReportNumber++) ++ { ++ HID_ReportItem_t* ReportItem = &HIDReportInfo.ReportItems[ReportNumber]; ++ ++ /* Update the report item value if it is contained within the current report */ ++ if (!(USB_GetHIDReportItemInfo(MouseReport, ReportItem))) ++ continue; ++ ++ /* Determine what report item is being tested, process updated value as needed */ ++ if ((ReportItem->Attributes.Usage.Page == USAGE_PAGE_BUTTON) && ++ (ReportItem->ItemType == HID_REPORT_ITEM_In)) ++ { ++ /* Buttons are numbered sequentially in their HID usages, button 1 is the left mouse button */ ++ uint8_t ButtonID = ReportItem->Attributes.Usage.Usage; ++ ++ if ((ButtonID == 1) && (ReportItem->Value != 0)) ++ LEDMask = LEDS_ALL_LEDS; ++ } ++ else if ((ReportItem->Attributes.Usage.Page == USAGE_PAGE_GENERIC_DCTRL) && ++ (ReportItem->Attributes.Usage.Usage == USAGE_SCROLL_WHEEL) && ++ (ReportItem->ItemType == HID_REPORT_ITEM_In)) ++ { ++ /* Convert wheel data to a 16-bit signed value */ ++ int16_t WheelDelta = HID_ALIGN_DATA(ReportItem, int16_t); ++ ++ if (WheelDelta) ++ LEDMask = (LEDS_LED1 | LEDS_LED2 | ((WheelDelta > 0) ? LEDS_LED3 : LEDS_LED4)); ++ } ++ else if ((ReportItem->Attributes.Usage.Page == USAGE_PAGE_GENERIC_DCTRL) && ++ ((ReportItem->Attributes.Usage.Usage == USAGE_X) || ++ (ReportItem->Attributes.Usage.Usage == USAGE_Y)) && ++ (ReportItem->ItemType == HID_REPORT_ITEM_In)) ++ { ++ /* Convert X/Y movement to 16-bit signed value */ ++ int16_t DeltaMovement = HID_ALIGN_DATA(ReportItem, int16_t); ++ ++ if (DeltaMovement) ++ { ++ if (ReportItem->Attributes.Usage.Usage == USAGE_X) ++ LEDMask |= ((DeltaMovement > 0) ? LEDS_LED1 : LEDS_LED2); ++ else ++ LEDMask |= ((DeltaMovement > 0) ? LEDS_LED3 : LEDS_LED4); ++ } ++ } ++ } ++ ++ LEDs_SetAllLEDs(LEDMask); ++ } ++} ++ ++/** Event handler for the USB_DeviceAttached event. This indicates that a device has been attached to the host, and ++ * starts the library USB task to begin the enumeration and USB management process. ++ */ ++void EVENT_USB_Host_DeviceAttached(void) ++{ ++ puts_P(PSTR("Device Attached.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the USB_DeviceUnattached event. This indicates that a device has been removed from the host, and ++ * stops the library USB task management process. ++ */ ++void EVENT_USB_Host_DeviceUnattached(void) ++{ ++ puts_P(PSTR("\r\nDevice Unattached.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_DeviceEnumerationComplete event. This indicates that a device has been successfully ++ * enumerated by the host and is now ready to be used by the application. ++ */ ++void EVENT_USB_Host_DeviceEnumerationComplete(void) ++{ ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++ ++ uint16_t ConfigDescriptorSize; ++ uint8_t ConfigDescriptorData[512]; ++ ++ if (USB_Host_GetDeviceConfigDescriptor(1, &ConfigDescriptorSize, ConfigDescriptorData, ++ sizeof(ConfigDescriptorData)) != HOST_GETCONFIG_Successful) ++ { ++ puts_P(PSTR("Error Retrieving Configuration Descriptor.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (HID_Host_ConfigurePipes(&Mouse_HID_Interface, ++ ConfigDescriptorSize, ConfigDescriptorData) != HID_ENUMERROR_NoError) ++ { ++ puts_P(PSTR("Attached Device Not a Valid Mouse.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (USB_Host_SetDeviceConfiguration(1) != HOST_SENDCONTROL_Successful) ++ { ++ puts_P(PSTR("Error Setting Device Configuration.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (HID_Host_SetReportProtocol(&Mouse_HID_Interface) != 0) ++ { ++ puts_P(PSTR("Error Setting Report Protocol Mode or Not a Valid Mouse.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ puts_P(PSTR("Mouse Enumerated.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++} ++ ++/** Event handler for the USB_HostError event. This indicates that a hardware error occurred while in host mode. */ ++void EVENT_USB_Host_HostError(const uint8_t ErrorCode) ++{ ++ USB_Disable(); ++ ++ printf_P(PSTR(ESC_FG_RED "Host Mode Error\r\n" ++ " -- Error Code %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ for(;;); ++} ++ ++/** Event handler for the USB_DeviceEnumerationFailed event. This indicates that a problem occurred while ++ * enumerating an attached USB device. ++ */ ++void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode) ++{ ++ printf_P(PSTR(ESC_FG_RED "Dev Enum Error\r\n" ++ " -- Error Code %d\r\n" ++ " -- Sub Error Code %d\r\n" ++ " -- In State %d\r\n" ESC_FG_WHITE), ErrorCode, SubErrorCode, USB_HostState); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++} ++ ++/** Callback for the HID Report Parser. This function is called each time the HID report parser is about to store ++ * an IN, OUT or FEATURE item into the HIDReportInfo structure. To save on RAM, we are able to filter out items ++ * we aren't interested in (preventing us from being able to extract them later on, but saving on the RAM they would ++ * have occupied). ++ * ++ * \param[in] CurrentItem Pointer to the item the HID report parser is currently working with ++ * ++ * \return Boolean \c true if the item should be stored into the HID report structure, \c false if it should be discarded ++ */ ++bool CALLBACK_HIDParser_FilterHIDReportItem(HID_ReportItem_t* const CurrentItem) ++{ ++ bool IsMouse = false; ++ ++ /* Iterate through the item's collection path, until either the root collection node or a collection with the ++ * Mouse Usage is found - this prevents Joysticks, which use identical descriptors except for the Joystick usage ++ * parent node, from being erroneously treated as a mouse by the demo ++ */ ++ for (HID_CollectionPath_t* CurrPath = CurrentItem->CollectionPath; CurrPath != NULL; CurrPath = CurrPath->Parent) ++ { ++ if ((CurrPath->Usage.Page == USAGE_PAGE_GENERIC_DCTRL) && ++ (CurrPath->Usage.Usage == USAGE_MOUSE)) ++ { ++ IsMouse = true; ++ break; ++ } ++ } ++ ++ /* If a collection with the mouse usage was not found, indicate that we are not interested in this item */ ++ if (!IsMouse) ++ return false; ++ ++ /* Check the attributes of the current item - see if we are interested in it or not; ++ * only store BUTTON and GENERIC_DESKTOP_CONTROL items into the Processed HID Report ++ * structure to save RAM and ignore the rest ++ */ ++ return ((CurrentItem->Attributes.Usage.Page == USAGE_PAGE_BUTTON) || ++ (CurrentItem->Attributes.Usage.Page == USAGE_PAGE_GENERIC_DCTRL)); ++} ++ diff --cc lib/lufa/Demos/Host/ClassDriver/MouseHostWithParser/MouseHostWithParser.h index 000000000,000000000..2ec1348ea new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/MouseHostWithParser/MouseHostWithParser.h @@@ -1,0 -1,0 +1,98 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 MouseHost.c. ++ */ ++ ++#ifndef _MOUSE_HOST_H_ ++#define _MOUSE_HOST_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/pgmspace.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <stdio.h> ++ ++ #include <LUFA/Drivers/Misc/TerminalCodes.h> ++ #include <LUFA/Drivers/Peripheral/Serial.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Platform/Platform.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) ++ ++ /** HID Report Descriptor Usage Page value for a toggle button. */ ++ #define USAGE_PAGE_BUTTON 0x09 ++ ++ /** HID Report Descriptor Usage Page value for a Generic Desktop Control. */ ++ #define USAGE_PAGE_GENERIC_DCTRL 0x01 ++ ++ /** HID Report Descriptor Usage for a Mouse. */ ++ #define USAGE_MOUSE 0x02 ++ ++ /** HID Report Descriptor Usage value for a X axis movement. */ ++ #define USAGE_X 0x30 ++ ++ /** HID Report Descriptor Usage value for a Y axis movement. */ ++ #define USAGE_Y 0x31 ++ ++ /** HID Report Descriptor Usage value for a Scroll Wheel movement. */ ++ #define USAGE_SCROLL_WHEEL 0x38 ++ ++ /* Function Prototypes: */ ++ void SetupHardware(void); ++ void MouseHost_Task(void); ++ ++ void EVENT_USB_Host_HostError(const uint8_t ErrorCode); ++ void EVENT_USB_Host_DeviceAttached(void); ++ void EVENT_USB_Host_DeviceUnattached(void); ++ void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode); ++ void EVENT_USB_Host_DeviceEnumerationComplete(void); ++ ++ bool CALLBACK_HIDParser_FilterHIDReportItem(HID_ReportItem_t* const CurrentItem); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/ClassDriver/MouseHostWithParser/MouseHostWithParser.txt index 000000000,000000000..9b1b7d055 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/MouseHostWithParser/MouseHostWithParser.txt @@@ -1,0 -1,0 +1,71 @@@ ++/** \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 Mouse Host With HID Descriptor Parser Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * ++ * \section Sec_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>Host</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Class:</b></td> ++ * <td>Human Interface Device (HID)</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>N/A</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF HID Specification \n ++ * USBIF HID Usage Tables</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Low Speed Mode \n ++ * Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Mouse host demonstration application. This gives a simple reference ++ * application for implementing a USB Mouse host, for USB mice using ++ * the standard mouse HID profile. It uses a HID parser for the HID ++ * reports, allowing for correct operation across all USB mice. This ++ * demo supports mice with a single HID report. ++ * ++ * Mouse and scroll wheel movement and button presses are displayed ++ * on the board LEDs. On connection to a USB mouse, the report items ++ * will be processed and printed as a formatted list through the USART ++ * before the mouse is fully enumerated. ++ * ++ * Currently only single interface mice are supported. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Host/ClassDriver/MouseHostWithParser/asf.xml index 000000000,000000000..220eb457c new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/MouseHostWithParser/asf.xml @@@ -1,0 -1,0 +1,48 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Mouse HID (with parser) Host Demo (Class Driver APIs)" id="lufa.demos.host.class.mouse_parser.example.avr8"> ++ <require idref="lufa.demos.host.class.mouse_parser"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.host.class.mouse_parser" caption="Mouse HID (with parser) Host Demo (Class Driver APIs)"> ++ <info type="description" value="summary"> ++ Mouse HID Host demo with HID parser, implementing a basic USB mouse host that can display movement data on the board LEDs. This demo uses the user-friendly USB Class Driver APIs to provide a simple, abstracted interface into the USB stack. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Class Driver APIs"/> ++ <keyword value="USB Host"/> ++ <keyword value="HID Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="MouseHostWithParser.txt"/> ++ ++ <build type="c-source" value="MouseHostWithParser.c"/> ++ <build type="header-file" value="MouseHostWithParser.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.peripheral.usart"/> ++ <require idref="lufa.drivers.misc.ansi"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Host/ClassDriver/MouseHostWithParser/doxyfile index 000000000,000000000..f12fda279 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/MouseHostWithParser/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Mouse Host Demo (Using HID Descriptor Parser)" ++ ++# 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Host/ClassDriver/MouseHostWithParser/makefile index 000000000,000000000..7df0417ec new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/MouseHostWithParser/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = MouseHostWithParser ++SRC = $(TARGET).c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) $(LUFA_SRC_SERIAL) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Host/ClassDriver/PrinterHost/Config/LUFAConfig.h index 000000000,000000000..197122fce new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/PrinterHost/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++// #define USB_DEVICE_ONLY ++ #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++// #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++// #define FIXED_CONTROL_ENDPOINT_SIZE {Insert Value Here} ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++// #define FIXED_NUM_CONFIGURATIONS {Insert Value Here} ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Host/ClassDriver/PrinterHost/PrinterHost.c index 000000000,000000000..499204fc2 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/PrinterHost/PrinterHost.c @@@ -1,0 -1,0 +1,234 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 PrinterHost demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "PrinterHost.h" ++ ++/** LUFA Printer Class driver interface configuration and state information. This structure is ++ * passed to all Printer Class driver functions, so that multiple instances of the same class ++ * within a device can be differentiated from one another. ++ */ ++USB_ClassInfo_PRNT_Host_t Printer_PRNT_Interface = ++ { ++ .Config = ++ { ++ .DataINPipe = ++ { ++ .Address = (PIPE_DIR_IN | 1), ++ .Banks = 1, ++ }, ++ .DataOUTPipe = ++ { ++ .Address = (PIPE_DIR_OUT | 2), ++ .Banks = 1, ++ }, ++ }, ++ }; ++ ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ puts_P(PSTR(ESC_FG_CYAN "Printer Host Demo running.\r\n" ESC_FG_WHITE)); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ PrinterHost_Task(); ++ ++ PRNT_Host_USBTask(&Printer_PRNT_Interface); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#endif ++ ++ /* Hardware Initialization */ ++ Serial_Init(9600, false); ++ LEDs_Init(); ++ USB_Init(); ++ ++ /* Create a stdio stream for the serial port for stdin and stdout */ ++ Serial_CreateStream(NULL); ++} ++ ++/** Task to manage an enumerated USB printer once connected, to display device ++ * information and print a test PCL page. ++ */ ++void PrinterHost_Task(void) ++{ ++ if (USB_HostState != HOST_STATE_Configured) ++ return; ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_BUSY); ++ ++ puts_P(PSTR("Retrieving Device ID...\r\n")); ++ ++ char DeviceIDString[300]; ++ if (PRNT_Host_GetDeviceID(&Printer_PRNT_Interface, DeviceIDString, ++ sizeof(DeviceIDString)) != HOST_SENDCONTROL_Successful) ++ { ++ puts_P(PSTR("Error Getting Device ID.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ printf_P(PSTR("Device ID: %s.\r\n"), DeviceIDString); ++ ++ char TestPageData[] = "\033%-12345X\033E" "LUFA PCL Test Page" "\033E\033%-12345X"; ++ uint16_t TestPageLength = strlen(TestPageData); ++ ++ printf_P(PSTR("Sending Test Page (%d bytes)...\r\n"), TestPageLength); ++ ++ if (PRNT_Host_SendData(&Printer_PRNT_Interface, &TestPageData, TestPageLength) != PIPE_RWSTREAM_NoError) ++ { ++ puts_P(PSTR("Error Sending Page Data.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ puts_P(PSTR("Test Page Sent.\r\n")); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++ USB_Host_SetDeviceConfiguration(0); ++} ++ ++/** Event handler for the USB_DeviceAttached event. This indicates that a device has been attached to the host, and ++ * starts the library USB task to begin the enumeration and USB management process. ++ */ ++void EVENT_USB_Host_DeviceAttached(void) ++{ ++ puts_P(PSTR("Device Attached.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the USB_DeviceUnattached event. This indicates that a device has been removed from the host, and ++ * stops the library USB task management process. ++ */ ++void EVENT_USB_Host_DeviceUnattached(void) ++{ ++ puts_P(PSTR("\r\nDevice Unattached.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_DeviceEnumerationComplete event. This indicates that a device has been successfully ++ * enumerated by the host and is now ready to be used by the application. ++ */ ++void EVENT_USB_Host_DeviceEnumerationComplete(void) ++{ ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++ ++ uint16_t ConfigDescriptorSize; ++ uint8_t ConfigDescriptorData[512]; ++ ++ if (USB_Host_GetDeviceConfigDescriptor(1, &ConfigDescriptorSize, ConfigDescriptorData, ++ sizeof(ConfigDescriptorData)) != HOST_GETCONFIG_Successful) ++ { ++ puts_P(PSTR("Error Retrieving Configuration Descriptor.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (PRNT_Host_ConfigurePipes(&Printer_PRNT_Interface, ++ ConfigDescriptorSize, ConfigDescriptorData) != PRNT_ENUMERROR_NoError) ++ { ++ puts_P(PSTR("Attached Device Not a Valid Printer Class Device.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (USB_Host_SetDeviceConfiguration(1) != HOST_SENDCONTROL_Successful) ++ { ++ puts_P(PSTR("Error Setting Device Configuration.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (PRNT_Host_SetBidirectionalMode(&Printer_PRNT_Interface) != HOST_SENDCONTROL_Successful) ++ { ++ puts_P(PSTR("Error Setting Bidirectional Mode.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ puts_P(PSTR("Printer Device Enumerated.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++} ++ ++/** Event handler for the USB_HostError event. This indicates that a hardware error occurred while in host mode. */ ++void EVENT_USB_Host_HostError(const uint8_t ErrorCode) ++{ ++ USB_Disable(); ++ ++ printf_P(PSTR(ESC_FG_RED "Host Mode Error\r\n" ++ " -- Error Code %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ for(;;); ++} ++ ++/** Event handler for the USB_DeviceEnumerationFailed event. This indicates that a problem occurred while ++ * enumerating an attached USB device. ++ */ ++void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode) ++{ ++ printf_P(PSTR(ESC_FG_RED "Dev Enum Error\r\n" ++ " -- Error Code %d\r\n" ++ " -- Sub Error Code %d\r\n" ++ " -- In State %d\r\n" ESC_FG_WHITE), ErrorCode, SubErrorCode, USB_HostState); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++} ++ diff --cc lib/lufa/Demos/Host/ClassDriver/PrinterHost/PrinterHost.h index 000000000,000000000..a05e727e7 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/PrinterHost/PrinterHost.h @@@ -1,0 -1,0 +1,81 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 PrinterHost.c. ++ */ ++ ++#ifndef _PRINTER_HOST_H_ ++#define _PRINTER_HOST_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/pgmspace.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <stdio.h> ++ ++ #include <LUFA/Drivers/Misc/TerminalCodes.h> ++ #include <LUFA/Drivers/Peripheral/Serial.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Platform/Platform.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) ++ ++ /** LED mask for the library LED driver, to indicate that the USB interface is busy. */ ++ #define LEDMASK_USB_BUSY LEDS_LED2 ++ ++ /* Function Prototypes: */ ++ void SetupHardware(void); ++ void PrinterHost_Task(void); ++ ++ void EVENT_USB_Host_HostError(const uint8_t ErrorCode); ++ void EVENT_USB_Host_DeviceAttached(void); ++ void EVENT_USB_Host_DeviceUnattached(void); ++ void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode); ++ void EVENT_USB_Host_DeviceEnumerationComplete(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/ClassDriver/PrinterHost/PrinterHost.txt index 000000000,000000000..e2a482058 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/PrinterHost/PrinterHost.txt @@@ -1,0 -1,0 +1,66 @@@ ++/** \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 Printer Host Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * ++ * \section Sec_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>Host</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Class:</b></td> ++ * <td>Printer Device</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>Bidirectional Protocol</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF Printer Class Specification \n ++ * PCL Language Specification</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Low Speed Mode \n ++ * Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Printer host demonstration application. This gives a simple reference ++ * application for implementing a USB Printer host, for USB printers using ++ * the bidirectional data encapsulation protocol and PCL language. ++ * ++ * Upon connection of a compatible printer, the printer's device ID is sent ++ * to the AVR's serial port, and a simple test page is printed using the PCL ++ * printer language. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Host/ClassDriver/PrinterHost/asf.xml index 000000000,000000000..bd355cf35 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/PrinterHost/asf.xml @@@ -1,0 -1,0 +1,48 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Printer Host Demo (Class Driver APIs)" id="lufa.demos.host.class.printer.example.avr8"> ++ <require idref="lufa.demos.host.class.printer"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.host.class.printer" caption="Printer Host Demo (Class Driver APIs)"> ++ <info type="description" value="summary"> ++ Printer Host demo, implementing a basic USB printer host that can send raw printer control data to an attached device. This demo uses the user-friendly USB Class Driver APIs to provide a simple, abstracted interface into the USB stack. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Class Driver APIs"/> ++ <keyword value="USB Host"/> ++ <keyword value="Printer Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="PrinterHost.txt"/> ++ ++ <build type="c-source" value="PrinterHost.c"/> ++ <build type="header-file" value="PrinterHost.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.peripheral.usart"/> ++ <require idref="lufa.drivers.misc.ansi"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Host/ClassDriver/PrinterHost/doxyfile index 000000000,000000000..3fcf03b2b new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/PrinterHost/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Printer Host 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Host/ClassDriver/PrinterHost/makefile index 000000000,000000000..0d6325608 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/PrinterHost/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = PrinterHost ++SRC = $(TARGET).c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) $(LUFA_SRC_SERIAL) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Host/ClassDriver/RNDISEthernetHost/Config/LUFAConfig.h index 000000000,000000000..197122fce new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/RNDISEthernetHost/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++// #define USB_DEVICE_ONLY ++ #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++// #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++// #define FIXED_CONTROL_ENDPOINT_SIZE {Insert Value Here} ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++// #define FIXED_NUM_CONFIGURATIONS {Insert Value Here} ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Host/ClassDriver/RNDISEthernetHost/RNDISEthernetHost.c index 000000000,000000000..21afed338 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/RNDISEthernetHost/RNDISEthernetHost.c @@@ -1,0 -1,0 +1,253 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 RNDISEthernetHost demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "RNDISEthernetHost.h" ++ ++/** Buffer to hold incoming and outgoing Ethernet packets. */ ++static int8_t PacketBuffer[1024]; ++ ++/** LUFA RNDIS Class driver interface configuration and state information. This structure is ++ * passed to all RNDIS Class driver functions, so that multiple instances of the same class ++ * within a device can be differentiated from one another. ++ */ ++USB_ClassInfo_RNDIS_Host_t Ethernet_RNDIS_Interface = ++ { ++ .Config = ++ { ++ .DataINPipe = ++ { ++ .Address = (PIPE_DIR_IN | 1), ++ .Banks = 1, ++ }, ++ .DataOUTPipe = ++ { ++ .Address = (PIPE_DIR_OUT | 2), ++ .Banks = 1, ++ }, ++ .NotificationPipe = ++ { ++ .Address = (PIPE_DIR_IN | 3), ++ .Banks = 1, ++ }, ++ .HostMaxPacketSize = sizeof(PacketBuffer), ++ }, ++ }; ++ ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ puts_P(PSTR(ESC_FG_CYAN "RNDIS Host Demo running.\r\n" ESC_FG_WHITE)); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ sei(); ++ ++ for (;;) ++ { ++ RNDISHost_Task(); ++ ++ RNDIS_Host_USBTask(&Ethernet_RNDIS_Interface); ++ USB_USBTask(); ++ } ++} ++ ++/** Task to manage an enumerated USB RNDIS device once connected, to display device ++ * received data packets. ++ */ ++void RNDISHost_Task(void) ++{ ++ if (USB_HostState != HOST_STATE_Configured) ++ return; ++ ++ if (RNDIS_Host_IsPacketReceived(&Ethernet_RNDIS_Interface)) ++ { ++ LEDs_SetAllLEDs(LEDMASK_USB_BUSY); ++ ++ uint16_t PacketLength; ++ RNDIS_Host_ReadPacket(&Ethernet_RNDIS_Interface, &PacketBuffer, &PacketLength); ++ ++ printf_P(PSTR("***PACKET (Size %d)***\r\n"), PacketLength); ++ ++ for (uint16_t i = 0; i < PacketLength; i++) ++ printf("0x%02x ", PacketBuffer[i]); ++ ++ printf_P(PSTR("\r\n\r\n")); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#endif ++ ++ /* Hardware Initialization */ ++ Serial_Init(9600, false); ++ LEDs_Init(); ++ USB_Init(); ++ ++ /* Create a stdio stream for the serial port for stdin and stdout */ ++ Serial_CreateStream(NULL); ++} ++ ++/** Event handler for the USB_DeviceAttached event. This indicates that a device has been attached to the host, and ++ * starts the library USB task to begin the enumeration and USB management process. ++ */ ++void EVENT_USB_Host_DeviceAttached(void) ++{ ++ puts_P(PSTR("Device Attached.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the USB_DeviceUnattached event. This indicates that a device has been removed from the host, and ++ * stops the library USB task management process. ++ */ ++void EVENT_USB_Host_DeviceUnattached(void) ++{ ++ puts_P(PSTR("\r\nDevice Unattached.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_DeviceEnumerationComplete event. This indicates that a device has been successfully ++ * enumerated by the host and is now ready to be used by the application. ++ */ ++void EVENT_USB_Host_DeviceEnumerationComplete(void) ++{ ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++ ++ uint16_t ConfigDescriptorSize; ++ uint8_t ConfigDescriptorData[512]; ++ ++ if (USB_Host_GetDeviceConfigDescriptor(1, &ConfigDescriptorSize, ConfigDescriptorData, ++ sizeof(ConfigDescriptorData)) != HOST_GETCONFIG_Successful) ++ { ++ puts_P(PSTR("Error Retrieving Configuration Descriptor.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (RNDIS_Host_ConfigurePipes(&Ethernet_RNDIS_Interface, ++ ConfigDescriptorSize, ConfigDescriptorData) != RNDIS_ENUMERROR_NoError) ++ { ++ puts_P(PSTR("Attached Device Not a Valid RNDIS Class Device.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (USB_Host_SetDeviceConfiguration(1) != HOST_SENDCONTROL_Successful) ++ { ++ puts_P(PSTR("Error Setting Device Configuration.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (RNDIS_Host_InitializeDevice(&Ethernet_RNDIS_Interface) != HOST_SENDCONTROL_Successful) ++ { ++ puts_P(PSTR("Error Initializing Device.\r\n")); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ printf_P(PSTR("Device Max Transfer Size: %lu bytes.\r\n"), Ethernet_RNDIS_Interface.State.DeviceMaxPacketSize); ++ ++ uint32_t PacketFilter = (REMOTE_NDIS_PACKET_DIRECTED | REMOTE_NDIS_PACKET_BROADCAST | REMOTE_NDIS_PACKET_ALL_MULTICAST); ++ if (RNDIS_Host_SetRNDISProperty(&Ethernet_RNDIS_Interface, OID_GEN_CURRENT_PACKET_FILTER, ++ &PacketFilter, sizeof(PacketFilter)) != HOST_SENDCONTROL_Successful) ++ { ++ puts_P(PSTR("Error Setting Device Packet Filter.\r\n")); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ uint32_t VendorID; ++ if (RNDIS_Host_QueryRNDISProperty(&Ethernet_RNDIS_Interface, OID_GEN_VENDOR_ID, ++ &VendorID, sizeof(VendorID)) != HOST_SENDCONTROL_Successful) ++ { ++ puts_P(PSTR("Error Getting Vendor ID.\r\n")); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ printf_P(PSTR("Device Vendor ID: 0x%08lX\r\n"), VendorID); ++ ++ puts_P(PSTR("RNDIS Device Enumerated.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++} ++ ++/** Event handler for the USB_HostError event. This indicates that a hardware error occurred while in host mode. */ ++void EVENT_USB_Host_HostError(const uint8_t ErrorCode) ++{ ++ USB_Disable(); ++ ++ printf_P(PSTR(ESC_FG_RED "Host Mode Error\r\n" ++ " -- Error Code %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ for(;;); ++} ++ ++/** Event handler for the USB_DeviceEnumerationFailed event. This indicates that a problem occurred while ++ * enumerating an attached USB device. ++ */ ++void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode) ++{ ++ printf_P(PSTR(ESC_FG_RED "Dev Enum Error\r\n" ++ " -- Error Code %d\r\n" ++ " -- Sub Error Code %d\r\n" ++ " -- In State %d\r\n" ESC_FG_WHITE), ErrorCode, SubErrorCode, USB_HostState); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++} ++ diff --cc lib/lufa/Demos/Host/ClassDriver/RNDISEthernetHost/RNDISEthernetHost.h index 000000000,000000000..c6fd1a430 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/RNDISEthernetHost/RNDISEthernetHost.h @@@ -1,0 -1,0 +1,81 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 RNDISEthernetHost.c. ++ */ ++ ++#ifndef _RNDIS_HOST_H_ ++#define _RNDIS_HOST_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/pgmspace.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <stdio.h> ++ ++ #include <LUFA/Drivers/Misc/TerminalCodes.h> ++ #include <LUFA/Drivers/Peripheral/Serial.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Platform/Platform.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) ++ ++ /** LED mask for the library LED driver, to indicate that the USB interface is busy. */ ++ #define LEDMASK_USB_BUSY LEDS_LED2 ++ ++ /* Function Prototypes: */ ++ void SetupHardware(void); ++ void RNDISHost_Task(void); ++ ++ void EVENT_USB_Host_HostError(const uint8_t ErrorCode); ++ void EVENT_USB_Host_DeviceAttached(void); ++ void EVENT_USB_Host_DeviceUnattached(void); ++ void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode); ++ void EVENT_USB_Host_DeviceEnumerationComplete(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/ClassDriver/RNDISEthernetHost/RNDISEthernetHost.txt index 000000000,000000000..e9edd6d66 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/RNDISEthernetHost/RNDISEthernetHost.txt @@@ -1,0 -1,0 +1,63 @@@ ++/** \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 RNDIS Host Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * ++ * \section Sec_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>Host</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Class:</b></td> ++ * <td>Communications Device Class (CDC)</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>Remote NDIS (Microsoft Proprietary CDC Class Networking Standard)</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>Microsoft RNDIS Specification</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * RNDIS host demonstration application. This gives a simple reference ++ * application for implementing a RNDIS Ethernet host, for USB devices such as ++ * modems. ++ * ++ * This demo will enumerate an attached USB RNDIS device, print out its vendor ID ++ * and any received packets in raw form through the serial USART. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Host/ClassDriver/RNDISEthernetHost/asf.xml index 000000000,000000000..37cedaaa5 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/RNDISEthernetHost/asf.xml @@@ -1,0 -1,0 +1,48 @@@ ++<asf xmlversion="1.0"> ++ <project caption="RNDIS Ethernet Host Demo (Class Driver APIs)" id="lufa.demos.host.class.rndis.example.avr8"> ++ <require idref="lufa.demos.host.class.rndis"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.host.class.rndis" caption="RNDIS Ethernet Host Demo (Class Driver APIs)"> ++ <info type="description" value="summary"> ++ Microsoft RNDIS Ethernet Host demo, implementing a RNDIS host that can send and receive Ethernet data to and from an attached device. This demo uses the user-friendly USB Class Driver APIs to provide a simple, abstracted interface into the USB stack. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Class Driver APIs"/> ++ <keyword value="USB Host"/> ++ <keyword value="RNDIS Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="RNDISEthernetHost.txt"/> ++ ++ <build type="c-source" value="RNDISEthernetHost.c"/> ++ <build type="header-file" value="RNDISEthernetHost.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.peripheral.usart"/> ++ <require idref="lufa.drivers.misc.ansi"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Host/ClassDriver/RNDISEthernetHost/doxyfile index 000000000,000000000..6f97bee2c new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/RNDISEthernetHost/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - RNDIS Ethernet Host 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Host/ClassDriver/RNDISEthernetHost/makefile index 000000000,000000000..b959ece42 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/RNDISEthernetHost/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = RNDISEthernetHost ++SRC = $(TARGET).c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) $(LUFA_SRC_SERIAL) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Host/ClassDriver/StillImageHost/Config/LUFAConfig.h index 000000000,000000000..197122fce new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/StillImageHost/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++// #define USB_DEVICE_ONLY ++ #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++// #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++// #define FIXED_CONTROL_ENDPOINT_SIZE {Insert Value Here} ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++// #define FIXED_NUM_CONFIGURATIONS {Insert Value Here} ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Host/ClassDriver/StillImageHost/StillImageHost.c index 000000000,000000000..fc0c4fa9a new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/StillImageHost/StillImageHost.c @@@ -1,0 -1,0 +1,230 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 StillImageHost demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "StillImageHost.h" ++ ++/** LUFA Still Image Class driver interface configuration and state information. This structure is ++ * passed to all Still Image Class driver functions, so that multiple instances of the same class ++ * within a device can be differentiated from one another. ++ */ ++USB_ClassInfo_SI_Host_t DigitalCamera_SI_Interface = ++ { ++ .Config = ++ { ++ .DataINPipe = ++ { ++ .Address = (PIPE_DIR_IN | 1), ++ .Banks = 1, ++ }, ++ .DataOUTPipe = ++ { ++ .Address = (PIPE_DIR_OUT | 2), ++ .Banks = 1, ++ }, ++ .EventsPipe = ++ { ++ .Address = (PIPE_DIR_IN | 3), ++ .Banks = 1, ++ }, ++ }, ++ }; ++ ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ puts_P(PSTR(ESC_FG_CYAN "Still Image Host Demo running.\r\n" ESC_FG_WHITE)); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ StillImageHost_Task(); ++ ++ SI_Host_USBTask(&DigitalCamera_SI_Interface); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#endif ++ ++ /* Hardware Initialization */ ++ Serial_Init(9600, false); ++ LEDs_Init(); ++ USB_Init(); ++ ++ /* Create a stdio stream for the serial port for stdin and stdout */ ++ Serial_CreateStream(NULL); ++} ++ ++/** Task to manage an enumerated USB Still Image device once connected, to manage a ++ * new PIMA session in order to send commands to the attached device. ++ */ ++void StillImageHost_Task(void) ++{ ++ if (USB_HostState != HOST_STATE_Configured) ++ return; ++ ++ puts_P(PSTR("Opening Session...\r\n")); ++ ++ if (SI_Host_OpenSession(&DigitalCamera_SI_Interface) != PIPE_RWSTREAM_NoError) ++ { ++ puts_P(PSTR("Could not open PIMA session.\r\n")); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ puts_P(PSTR("Turning off Device...\r\n")); ++ ++ SI_Host_SendCommand(&DigitalCamera_SI_Interface, 0x1013, 0, NULL); ++ if (SI_Host_ReceiveResponse(&DigitalCamera_SI_Interface)) ++ { ++ puts_P(PSTR("Could not turn off device.\r\n")); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ puts_P(PSTR("Device Off.\r\n")); ++ ++ puts_P(PSTR("Closing Session...\r\n")); ++ ++ if (SI_Host_CloseSession(&DigitalCamera_SI_Interface) != PIPE_RWSTREAM_NoError) ++ { ++ puts_P(PSTR("Could not close PIMA session.\r\n")); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++ USB_Host_SetDeviceConfiguration(0); ++} ++ ++/** Event handler for the USB_DeviceAttached event. This indicates that a device has been attached to the host, and ++ * starts the library USB task to begin the enumeration and USB management process. ++ */ ++void EVENT_USB_Host_DeviceAttached(void) ++{ ++ puts_P(PSTR("Device Attached.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the USB_DeviceUnattached event. This indicates that a device has been removed from the host, and ++ * stops the library USB task management process. ++ */ ++void EVENT_USB_Host_DeviceUnattached(void) ++{ ++ puts_P(PSTR("\r\nDevice Unattached.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_DeviceEnumerationComplete event. This indicates that a device has been successfully ++ * enumerated by the host and is now ready to be used by the application. ++ */ ++void EVENT_USB_Host_DeviceEnumerationComplete(void) ++{ ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++ ++ uint16_t ConfigDescriptorSize; ++ uint8_t ConfigDescriptorData[512]; ++ ++ if (USB_Host_GetDeviceConfigDescriptor(1, &ConfigDescriptorSize, ConfigDescriptorData, ++ sizeof(ConfigDescriptorData)) != HOST_GETCONFIG_Successful) ++ { ++ puts_P(PSTR("Error Retrieving Configuration Descriptor.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (SI_Host_ConfigurePipes(&DigitalCamera_SI_Interface, ++ ConfigDescriptorSize, ConfigDescriptorData) != SI_ENUMERROR_NoError) ++ { ++ puts_P(PSTR("Attached Device Not a Valid Still Image Class Device.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (USB_Host_SetDeviceConfiguration(1) != HOST_SENDCONTROL_Successful) ++ { ++ puts_P(PSTR("Error Setting Device Configuration.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ puts_P(PSTR("Still Image Device Enumerated.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++} ++ ++/** Event handler for the USB_HostError event. This indicates that a hardware error occurred while in host mode. */ ++void EVENT_USB_Host_HostError(const uint8_t ErrorCode) ++{ ++ USB_Disable(); ++ ++ printf_P(PSTR(ESC_FG_RED "Host Mode Error\r\n" ++ " -- Error Code %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ for(;;); ++} ++ ++/** Event handler for the USB_DeviceEnumerationFailed event. This indicates that a problem occurred while ++ * enumerating an attached USB device. ++ */ ++void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode) ++{ ++ printf_P(PSTR(ESC_FG_RED "Dev Enum Error\r\n" ++ " -- Error Code %d\r\n" ++ " -- Sub Error Code %d\r\n" ++ " -- In State %d\r\n" ESC_FG_WHITE), ErrorCode, SubErrorCode, USB_HostState); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++} ++ diff --cc lib/lufa/Demos/Host/ClassDriver/StillImageHost/StillImageHost.h index 000000000,000000000..00d966fad new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/StillImageHost/StillImageHost.h @@@ -1,0 -1,0 +1,78 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 StillImageHost.c. ++ */ ++ ++#ifndef _STILL_IMAGE_HOST_H_ ++#define _STILL_IMAGE_HOST_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/pgmspace.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <stdio.h> ++ ++ #include <LUFA/Drivers/Misc/TerminalCodes.h> ++ #include <LUFA/Drivers/Peripheral/Serial.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Platform/Platform.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 StillImageHost_Task(void); ++ ++ void EVENT_USB_Host_HostError(const uint8_t ErrorCode); ++ void EVENT_USB_Host_DeviceAttached(void); ++ void EVENT_USB_Host_DeviceUnattached(void); ++ void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode); ++ void EVENT_USB_Host_DeviceEnumerationComplete(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/ClassDriver/StillImageHost/StillImageHost.txt index 000000000,000000000..193228a20 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/StillImageHost/StillImageHost.txt @@@ -1,0 -1,0 +1,65 @@@ ++/** \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 Still Image Host Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * ++ * \section Sec_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>Host</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Class:</b></td> ++ * <td>Still Image Device</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>N/A</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF Still Image Class Specification \n ++ * PIMA 15740 Specification</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Still Image host demonstration application. This gives a simple reference ++ * application for implementing a Still Image host, for USB devices such as ++ * digital cameras. ++ * ++ * This demo will enumerate an attached USB Still Image device, print out its ++ * information structure, open a session with the device and finally close the ++ * session. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Host/ClassDriver/StillImageHost/asf.xml index 000000000,000000000..4a5f6bfeb new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/StillImageHost/asf.xml @@@ -1,0 -1,0 +1,48 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Still Image Host Demo (Class Driver APIs)" id="lufa.demos.host.class.si.example.avr8"> ++ <require idref="lufa.demos.host.class.si"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.host.class.si" caption="Still Image Host Demo (Class Driver APIs)"> ++ <info type="description" value="summary"> ++ Still Image Host demo, implementing a Still Image host that can send and receive PIMA data to and from an attached device. This demo uses the user-friendly USB Class Driver APIs to provide a simple, abstracted interface into the USB stack. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Class Driver APIs"/> ++ <keyword value="USB Host"/> ++ <keyword value="Still Image Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="StillImageHost.txt"/> ++ ++ <build type="c-source" value="StillImageHost.c"/> ++ <build type="header-file" value="StillImageHost.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.peripheral.usart"/> ++ <require idref="lufa.drivers.misc.ansi"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Host/ClassDriver/StillImageHost/doxyfile index 000000000,000000000..7eca05a94 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/StillImageHost/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Still Image Host 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Host/ClassDriver/StillImageHost/makefile index 000000000,000000000..b3d044aa1 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/StillImageHost/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = StillImageHost ++SRC = $(TARGET).c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) $(LUFA_SRC_SERIAL) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Host/ClassDriver/VirtualSerialHost/Config/LUFAConfig.h index 000000000,000000000..197122fce new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/VirtualSerialHost/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++// #define USB_DEVICE_ONLY ++ #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++// #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++// #define FIXED_CONTROL_ENDPOINT_SIZE {Insert Value Here} ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++// #define FIXED_NUM_CONFIGURATIONS {Insert Value Here} ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Host/ClassDriver/VirtualSerialHost/VirtualSerialHost.c index 000000000,000000000..740f285f6 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/VirtualSerialHost/VirtualSerialHost.c @@@ -1,0 -1,0 +1,217 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 VirtualSerialHost demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "VirtualSerialHost.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_Host_t VirtualSerial_CDC_Interface = ++ { ++ .Config = ++ { ++ .DataINPipe = ++ { ++ .Address = (PIPE_DIR_IN | 1), ++ .Banks = 1, ++ }, ++ .DataOUTPipe = ++ { ++ .Address = (PIPE_DIR_OUT | 2), ++ .Banks = 1, ++ }, ++ .NotificationPipe = ++ { ++ .Address = (PIPE_DIR_IN | 3), ++ .Banks = 1, ++ }, ++ }, ++ }; ++ ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ puts_P(PSTR(ESC_FG_CYAN "CDC Host Demo running.\r\n" ESC_FG_WHITE)); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ CDCHost_Task(); ++ ++ CDC_Host_USBTask(&VirtualSerial_CDC_Interface); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#endif ++ ++ /* Hardware Initialization */ ++ Serial_Init(9600, false); ++ LEDs_Init(); ++ USB_Init(); ++ ++ /* Create a stdio stream for the serial port for stdin and stdout */ ++ Serial_CreateStream(NULL); ++} ++ ++/** Task to manage an enumerated USB CDC device once connected, to print received data ++ * from the device to the serial port. ++ */ ++void CDCHost_Task(void) ++{ ++ if (USB_HostState != HOST_STATE_Configured) ++ return; ++ ++ if (CDC_Host_BytesReceived(&VirtualSerial_CDC_Interface)) ++ { ++ /* Echo received bytes from the attached device through the USART */ ++ int16_t ReceivedByte = CDC_Host_ReceiveByte(&VirtualSerial_CDC_Interface); ++ if (!(ReceivedByte < 0)) ++ putchar(ReceivedByte); ++ } ++} ++ ++/** Event handler for the USB_DeviceAttached event. This indicates that a device has been attached to the host, and ++ * starts the library USB task to begin the enumeration and USB management process. ++ */ ++void EVENT_USB_Host_DeviceAttached(void) ++{ ++ puts_P(PSTR("Device Attached.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the USB_DeviceUnattached event. This indicates that a device has been removed from the host, and ++ * stops the library USB task management process. ++ */ ++void EVENT_USB_Host_DeviceUnattached(void) ++{ ++ puts_P(PSTR("\r\nDevice Unattached.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_DeviceEnumerationComplete event. This indicates that a device has been successfully ++ * enumerated by the host and is now ready to be used by the application. ++ */ ++void EVENT_USB_Host_DeviceEnumerationComplete(void) ++{ ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++ ++ uint16_t ConfigDescriptorSize; ++ uint8_t ConfigDescriptorData[512]; ++ ++ if (USB_Host_GetDeviceConfigDescriptor(1, &ConfigDescriptorSize, ConfigDescriptorData, ++ sizeof(ConfigDescriptorData)) != HOST_GETCONFIG_Successful) ++ { ++ puts_P(PSTR("Error Retrieving Configuration Descriptor.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (CDC_Host_ConfigurePipes(&VirtualSerial_CDC_Interface, ++ ConfigDescriptorSize, ConfigDescriptorData) != CDC_ENUMERROR_NoError) ++ { ++ puts_P(PSTR("Attached Device Not a Valid CDC Class Device.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if (USB_Host_SetDeviceConfiguration(1) != HOST_SENDCONTROL_Successful) ++ { ++ puts_P(PSTR("Error Setting Device Configuration.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ VirtualSerial_CDC_Interface.State.LineEncoding.BaudRateBPS = 9600; ++ VirtualSerial_CDC_Interface.State.LineEncoding.CharFormat = CDC_LINEENCODING_OneStopBit; ++ VirtualSerial_CDC_Interface.State.LineEncoding.ParityType = CDC_PARITY_None; ++ VirtualSerial_CDC_Interface.State.LineEncoding.DataBits = 8; ++ ++ if (CDC_Host_SetLineEncoding(&VirtualSerial_CDC_Interface)) ++ { ++ puts_P(PSTR("Error Setting Device Line Encoding.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ puts_P(PSTR("CDC Device Enumerated.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++} ++ ++/** Event handler for the USB_HostError event. This indicates that a hardware error occurred while in host mode. */ ++void EVENT_USB_Host_HostError(const uint8_t ErrorCode) ++{ ++ USB_Disable(); ++ ++ printf_P(PSTR(ESC_FG_RED "Host Mode Error\r\n" ++ " -- Error Code %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ for(;;); ++} ++ ++/** Event handler for the USB_DeviceEnumerationFailed event. This indicates that a problem occurred while ++ * enumerating an attached USB device. ++ */ ++void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode) ++{ ++ printf_P(PSTR(ESC_FG_RED "Dev Enum Error\r\n" ++ " -- Error Code %d\r\n" ++ " -- Sub Error Code %d\r\n" ++ " -- In State %d\r\n" ESC_FG_WHITE), ErrorCode, SubErrorCode, USB_HostState); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++} ++ diff --cc lib/lufa/Demos/Host/ClassDriver/VirtualSerialHost/VirtualSerialHost.h index 000000000,000000000..a2f8fd714 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/VirtualSerialHost/VirtualSerialHost.h @@@ -1,0 -1,0 +1,78 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 VirtualSerialHost.c. ++ */ ++ ++#ifndef _VIRTUALSERIAL_HOST_H_ ++#define _VIRTUALSERIAL_HOST_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/pgmspace.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <stdio.h> ++ ++ #include <LUFA/Drivers/Misc/TerminalCodes.h> ++ #include <LUFA/Drivers/Peripheral/Serial.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Platform/Platform.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 CDCHost_Task(void); ++ ++ void EVENT_USB_Host_HostError(const uint8_t ErrorCode); ++ void EVENT_USB_Host_DeviceAttached(void); ++ void EVENT_USB_Host_DeviceUnattached(void); ++ void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode); ++ void EVENT_USB_Host_DeviceEnumerationComplete(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/ClassDriver/VirtualSerialHost/VirtualSerialHost.txt index 000000000,000000000..1e1f9f1ae new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/VirtualSerialHost/VirtualSerialHost.txt @@@ -1,0 -1,0 +1,66 @@@ ++/** \file ++ * ++ * This file contains special DoxyGen information for the generation of the main page and other special ++ * documentation pages. It is not a project source file. ++ */ ++ ++/** \mainpage CDC Host Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * ++ * \section Sec_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>Host</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Class:</b></td> ++ * <td>Communications Device Class (CDC)</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>Abstract Control Model (ACM)</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF CDC Class Standard</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * CDC host demonstration application. This gives a simple reference application ++ * for implementing a USB CDC host, for CDC devices using the standard ACM profile. ++ * ++ * This demo prints out received CDC data through the serial port. ++ * ++ * Note that this demo is only compatible with devices which report the correct CDC ++ * and ACM class, subclass and protocol values. Most USB-Serial cables have vendor ++ * specific features, thus use vendor-specific class/subclass/protocol codes to force ++ * the user to use specialized drivers. This demo is not compatible with such devices. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Host/ClassDriver/VirtualSerialHost/asf.xml index 000000000,000000000..e456c9295 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/VirtualSerialHost/asf.xml @@@ -1,0 -1,0 +1,48 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Virtual Serial CDC Host Demo (Class Driver APIs)" id="lufa.demos.host.class.cdc.example.avr8"> ++ <require idref="lufa.demos.host.class.cdc"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.host.class.cdc" caption="Virtual Serial CDC Host Demo (Class Driver APIs)"> ++ <info type="description" value="summary"> ++ Virtual Serial Host demo, implementing a CDC host that can send and receive data to and from an attached device. This demo uses the user-friendly USB Class Driver APIs to provide a simple, abstracted interface into the USB stack. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Class Driver APIs"/> ++ <keyword value="USB Host"/> ++ <keyword value="CDC Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="VirtualSerialHost.txt"/> ++ ++ <build type="c-source" value="VirtualSerialHost.c"/> ++ <build type="header-file" value="VirtualSerialHost.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.peripheral.usart"/> ++ <require idref="lufa.drivers.misc.ansi"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Host/ClassDriver/VirtualSerialHost/doxyfile index 000000000,000000000..df50a03e9 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/VirtualSerialHost/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Virtual Serial Host 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Host/ClassDriver/VirtualSerialHost/makefile index 000000000,000000000..57cf89a35 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/VirtualSerialHost/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = VirtualSerialHost ++SRC = $(TARGET).c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) $(LUFA_SRC_SERIAL) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Host/ClassDriver/makefile index 000000000,000000000..90c156219 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/ClassDriver/makefile @@@ -1,0 -1,0 +1,46 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++ ++# Makefile to build all the LUFA Host Demos. Call with "make all" to ++# rebuild all Host demos. ++ ++# Projects are pre-cleaned before each one is built, to ensure any ++# custom LUFA library build options are reflected in the compiled ++# code. ++ ++PROJECT_DIRECTORIES := $(shell ls -d */) ++ ++# This makefile is potentially infinitely recursive if something really bad ++# happens when determining the set of project directories - hard-abort if ++# more than 10 levels deep to avoid angry emails. ++ifeq ($(MAKELEVEL), 10) ++ $(error EMERGENCY ABORT: INFINITE RECURSION DETECTED) ++endif ++ ++# Need to special-case building without a per-project object directory ++ifeq ($(OBJDIR),) ++ # If no target specified, force "clean all" and disallow parallel build ++ ifeq ($(MAKECMDGOALS),) ++ MAKECMDGOALS := clean all ++ .NOTPARALLEL: ++ endif ++ ++ # If one of the targets is to build, force "clean" beforehand and disallow parallel build ++ ifneq ($(findstring all, $(MAKECMDGOALS)),) ++ MAKECMDGOALS := clean $(MAKECMDGOALS) ++ .NOTPARALLEL: ++ endif ++endif ++ ++%: $(PROJECT_DIRECTORIES) ++ @echo . > /dev/null ++ ++$(PROJECT_DIRECTORIES): ++ @$(MAKE) -C $@ $(MAKECMDGOALS) ++ ++.PHONY: $(PROJECT_DIRECTORIES) diff --cc lib/lufa/Demos/Host/LowLevel/AndroidAccessoryHost/AndroidAccessoryHost.c index 000000000,000000000..63d94f78c new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/AndroidAccessoryHost/AndroidAccessoryHost.c @@@ -1,0 -1,0 +1,263 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 AndroidAccessoryHost demo. This file contains the main tasks ++ * of the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "AndroidAccessoryHost.h" ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ puts_P(PSTR(ESC_FG_CYAN "Android Accessory Host Demo running.\r\n" ESC_FG_WHITE)); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ AndroidHost_Task(); ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#endif ++ ++ /* Hardware Initialization */ ++ Serial_Init(9600, false); ++ LEDs_Init(); ++ USB_Init(); ++ ++ /* Create a stdio stream for the serial port for stdin and stdout */ ++ Serial_CreateStream(NULL); ++} ++ ++/** Task to set the configuration of the attached device after it has been enumerated. */ ++void AndroidHost_Task(void) ++{ ++ if (USB_HostState != HOST_STATE_Configured) ++ return; ++ ++ /* Select the data IN pipe */ ++ Pipe_SelectPipe(ANDROID_DATA_IN_PIPE); ++ Pipe_Unfreeze(); ++ ++ /* Check to see if a packet has been received */ ++ if (Pipe_IsINReceived()) ++ { ++ /* Re-freeze IN pipe after the packet has been received */ ++ Pipe_Freeze(); ++ ++ /* Check if data is in the pipe */ ++ if (Pipe_IsReadWriteAllowed()) ++ { ++ uint8_t NextReceivedByte = Pipe_Read_8(); ++ uint8_t LEDMask = LEDS_NO_LEDS; ++ ++ if (NextReceivedByte & 0x01) ++ LEDMask |= LEDS_LED1; ++ ++ if (NextReceivedByte & 0x02) ++ LEDMask |= LEDS_LED2; ++ ++ if (NextReceivedByte & 0x04) ++ LEDMask |= LEDS_LED3; ++ ++ if (NextReceivedByte & 0x08) ++ LEDMask |= LEDS_LED4; ++ ++ LEDs_SetAllLEDs(LEDMask); ++ } ++ else ++ { ++ /* Clear the pipe after all data in the packet has been read, ready for the next packet */ ++ Pipe_ClearIN(); ++ } ++ } ++ ++ /* Re-freeze IN pipe after use */ ++ Pipe_Freeze(); ++} ++ ++/** Event handler for the USB_DeviceAttached event. This indicates that a device has been attached to the host, and ++ * starts the library USB task to begin the enumeration and USB management process. ++ */ ++void EVENT_USB_Host_DeviceAttached(void) ++{ ++ puts_P(PSTR(ESC_FG_GREEN "Device Attached.\r\n" ESC_FG_WHITE)); ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the USB_DeviceUnattached event. This indicates that a device has been removed from the host, and ++ * stops the library USB task management process. ++ */ ++void EVENT_USB_Host_DeviceUnattached(void) ++{ ++ puts_P(PSTR(ESC_FG_GREEN "\r\nDevice Unattached.\r\n" ESC_FG_WHITE)); ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_DeviceEnumerationComplete event. This indicates that a device has been successfully ++ * enumerated by the host and is now ready to be used by the application. ++ */ ++void EVENT_USB_Host_DeviceEnumerationComplete(void) ++{ ++ puts_P(PSTR("Getting Device Data.\r\n")); ++ ++ /* Get and process the configuration descriptor data */ ++ uint8_t ErrorCode = ProcessDeviceDescriptor(); ++ ++ bool RequiresModeSwitch = (ErrorCode == NonAccessoryModeAndroidDevice); ++ ++ /* Error out if the device is not an Android device or an error occurred */ ++ if ((ErrorCode != AccessoryModeAndroidDevice) && (ErrorCode != NonAccessoryModeAndroidDevice)) ++ { ++ if (ErrorCode == ControlError) ++ puts_P(PSTR(ESC_FG_RED "Control Error (Get Device).\r\n")); ++ else ++ puts_P(PSTR(ESC_FG_RED "Invalid Device.\r\n")); ++ ++ printf_P(PSTR(" -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ printf_P(PSTR("Android Device Detected - %sAccessory mode.\r\n"), (RequiresModeSwitch ? "Non-" : "")); ++ ++ /* Check if a valid Android device was attached, but it is not current in Accessory mode */ ++ if (RequiresModeSwitch) ++ { ++ uint16_t AndroidProtocol; ++ ++ /* Fetch the version of the Android Accessory Protocol supported by the device */ ++ if ((ErrorCode = Android_GetAccessoryProtocol(&AndroidProtocol)) != HOST_SENDCONTROL_Successful) ++ { ++ printf_P(PSTR(ESC_FG_RED "Control Error (Get Protocol).\r\n" ++ " -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ /* Validate the returned protocol version */ ++ if (AndroidProtocol != AOA_PROTOCOL_AccessoryV1) ++ { ++ puts_P(PSTR(ESC_FG_RED "Accessory Mode Not Supported.")); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ /* Send the device strings and start the Android Accessory Mode */ ++ Android_SendString(AOA_STRING_Manufacturer, "Dean Camera"); ++ Android_SendString(AOA_STRING_Model, "LUFA Android Demo"); ++ Android_SendString(AOA_STRING_Description, "LUFA Android Demo"); ++ Android_SendString(AOA_STRING_Version, "1.0"); ++ Android_SendString(AOA_STRING_URI, "http://www.lufa-lib.org"); ++ Android_SendString(AOA_STRING_Serial, "0000000012345678"); ++ ++ Android_StartAccessoryMode(); ++ return; ++ } ++ ++ puts_P(PSTR("Getting Config Data.\r\n")); ++ ++ /* Get and process the configuration descriptor data */ ++ if ((ErrorCode = ProcessConfigurationDescriptor()) != SuccessfulConfigRead) ++ { ++ if (ErrorCode == ControlError) ++ puts_P(PSTR(ESC_FG_RED "Control Error (Get Configuration).\r\n")); ++ else ++ puts_P(PSTR(ESC_FG_RED "Invalid Device.\r\n")); ++ ++ printf_P(PSTR(" -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ /* Set the device configuration to the first configuration (rarely do devices use multiple configurations) */ ++ if ((ErrorCode = USB_Host_SetDeviceConfiguration(1)) != HOST_SENDCONTROL_Successful) ++ { ++ printf_P(PSTR(ESC_FG_RED "Control Error (Set Configuration).\r\n" ++ " -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ puts_P(PSTR("Accessory Mode Android Enumerated.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++} ++ ++/** Event handler for the USB_HostError event. This indicates that a hardware error occurred while in host mode. */ ++void EVENT_USB_Host_HostError(const uint8_t ErrorCode) ++{ ++ USB_Disable(); ++ ++ printf_P(PSTR(ESC_FG_RED "Host Mode Error\r\n" ++ " -- Error Code %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ for(;;); ++} ++ ++/** Event handler for the USB_DeviceEnumerationFailed event. This indicates that a problem occurred while ++ * enumerating an attached USB device. ++ */ ++void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode) ++{ ++ printf_P(PSTR(ESC_FG_RED "Dev Enum Error\r\n" ++ " -- Error Code %d\r\n" ++ " -- Sub Error Code %d\r\n" ++ " -- In State %d\r\n" ESC_FG_WHITE), ErrorCode, SubErrorCode, USB_HostState); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++} ++ diff --cc lib/lufa/Demos/Host/LowLevel/AndroidAccessoryHost/AndroidAccessoryHost.h index 000000000,000000000..36b2bf91e new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/AndroidAccessoryHost/AndroidAccessoryHost.h @@@ -1,0 -1,0 +1,86 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 AndroidAccessoryHost.c. ++ */ ++ ++#ifndef _ANDROID_ACCESSORY_HOST_H_ ++#define _ANDROID_ACCESSORY_HOST_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/pgmspace.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <stdio.h> ++ ++ #include "DeviceDescriptor.h" ++ #include "ConfigDescriptor.h" ++ #include "Lib/AndroidAccessoryCommands.h" ++ ++ #include <LUFA/Drivers/Misc/TerminalCodes.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Drivers/Peripheral/Serial.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Platform/Platform.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) ++ ++ /** LED mask for the library LED driver, to indicate that the USB interface is busy. */ ++ #define LEDMASK_USB_BUSY LEDS_LED2 ++ ++ /* Function Prototypes: */ ++ void SetupHardware(void); ++ void AndroidHost_Task(void); ++ ++ /* Event Handlers: */ ++ void EVENT_USB_Host_DeviceAttached(void); ++ void EVENT_USB_Host_DeviceUnattached(void); ++ void EVENT_USB_Host_DeviceEnumerationComplete(void); ++ void EVENT_USB_Host_HostError(const uint8_t ErrorCode); ++ void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/LowLevel/AndroidAccessoryHost/AndroidAccessoryHost.txt index 000000000,000000000..70e0935c9 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/AndroidAccessoryHost/AndroidAccessoryHost.txt @@@ -1,0 -1,0 +1,62 @@@ ++/** \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 Android Accessory Host Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * ++ * \section Sec_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>Host</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Class:</b></td> ++ * <td>Android Accessory Host Class</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>N/A</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>Android Accessory Host Specification</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Android Accessory Host demonstration application. This gives a simple reference ++ * application for implementing an Android Accessory Host device capable of hosting ++ * Android powered mobile devices to send and receive data. ++ * ++ * Sent data from the Android device will be indicated onto the board's LEDs. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Host/LowLevel/AndroidAccessoryHost/Config/LUFAConfig.h index 000000000,000000000..1d840f618 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/AndroidAccessoryHost/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++// #define USB_DEVICE_ONLY ++ #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++// #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++// #define FIXED_CONTROL_ENDPOINT_SIZE {Insert Value Here} ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++// #define FIXED_NUM_CONFIGURATIONS {Insert Value Here} ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++ #define HOST_DEVICE_SETTLE_DELAY_MS 0 ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Host/LowLevel/AndroidAccessoryHost/ConfigDescriptor.c index 000000000,000000000..d4aa87762 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/AndroidAccessoryHost/ConfigDescriptor.c @@@ -1,0 -1,0 +1,164 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 Configuration Descriptor processing routines, to determine the correct pipe configurations ++ * needed to communication with an attached USB device. Descriptors are special computer-readable structures ++ * which the host requests upon device enumeration, to determine the device's capabilities and functions. ++ */ ++ ++#include "ConfigDescriptor.h" ++ ++/** Reads and processes an attached device's descriptors, to determine compatibility and pipe configurations. This ++ * routine will read in the entire configuration descriptor, and configure the hosts pipes to correctly communicate ++ * with compatible devices. ++ * ++ * This routine searches for the first interface containing bulk IN and OUT data endpoints. ++ * ++ * \return An error code from the \ref AndroidHost_GetConfigDescriptorDataCodes_t enum. ++ */ ++uint8_t ProcessConfigurationDescriptor(void) ++{ ++ uint8_t ConfigDescriptorData[512]; ++ void* CurrConfigLocation = ConfigDescriptorData; ++ uint16_t CurrConfigBytesRem; ++ ++ USB_Descriptor_Endpoint_t* DataINEndpoint = NULL; ++ USB_Descriptor_Endpoint_t* DataOUTEndpoint = NULL; ++ ++ /* Retrieve the entire configuration descriptor into the allocated buffer */ ++ switch (USB_Host_GetDeviceConfigDescriptor(1, &CurrConfigBytesRem, ConfigDescriptorData, sizeof(ConfigDescriptorData))) ++ { ++ case HOST_GETCONFIG_Successful: ++ break; ++ case HOST_GETCONFIG_InvalidData: ++ return InvalidConfigDataReturned; ++ case HOST_GETCONFIG_BuffOverflow: ++ return DescriptorTooLarge; ++ default: ++ return DevControlError; ++ } ++ ++ /* There should be only one compatible Android Accessory Mode interface in the device, attempt to find it */ ++ if (USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, ++ DCOMP_NextAndroidAccessoryInterface) != DESCRIPTOR_SEARCH_COMP_Found) ++ { ++ return NoCompatibleInterfaceFound; ++ } ++ ++ while (!(DataINEndpoint) || !(DataOUTEndpoint)) ++ { ++ /* Get the next Android Accessory Mode interface's data endpoint descriptor */ ++ if (USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, ++ DCOMP_NextInterfaceBulkEndpoint) != DESCRIPTOR_SEARCH_COMP_Found) ++ { ++ /* Data endpoints not found within the first Android Accessory device interface, error out */ ++ return NoCompatibleInterfaceFound; ++ } ++ ++ /* Retrieve the endpoint address from the endpoint descriptor */ ++ USB_Descriptor_Endpoint_t* EndpointData = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Endpoint_t); ++ ++ /* If the endpoint is a IN type endpoint */ ++ if ((EndpointData->EndpointAddress & ENDPOINT_DIR_MASK) == ENDPOINT_DIR_IN) ++ DataINEndpoint = EndpointData; ++ else ++ DataOUTEndpoint = EndpointData; ++ } ++ ++ /* Configure the Android Accessory data IN pipe */ ++ Pipe_ConfigurePipe(ANDROID_DATA_IN_PIPE, EP_TYPE_BULK, DataINEndpoint->EndpointAddress, DataINEndpoint->EndpointSize, 1); ++ ++ /* Configure the Android Accessory data OUT pipe */ ++ Pipe_ConfigurePipe(ANDROID_DATA_OUT_PIPE, EP_TYPE_BULK, DataOUTEndpoint->EndpointAddress, DataOUTEndpoint->EndpointSize, 1); ++ ++ /* Valid data found, return success */ ++ return SuccessfulConfigRead; ++} ++ ++/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's ++ * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration ++ * descriptor processing if an incompatible descriptor configuration is found. ++ * ++ * This comparator searches for the next Interface descriptor containing the correct Android Accessory Mode Class, Subclass ++ * and Protocol values. ++ * ++ * \return A value from the DSEARCH_Return_ErrorCodes_t enum ++ */ ++uint8_t DCOMP_NextAndroidAccessoryInterface(void* const CurrentDescriptor) ++{ ++ USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t); ++ ++ if (Header->Type == DTYPE_Interface) ++ { ++ USB_Descriptor_Interface_t* Interface = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Interface_t); ++ ++ if ((Interface->Class == AOA_CSCP_AOADataClass) && ++ (Interface->SubClass == AOA_CSCP_AOADataSubclass) && ++ (Interface->Protocol == AOA_CSCP_AOADataProtocol)) ++ { ++ return DESCRIPTOR_SEARCH_Found; ++ } ++ } ++ ++ return DESCRIPTOR_SEARCH_NotFound; ++} ++ ++/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's ++ * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration ++ * descriptor processing if an incompatible descriptor configuration is found. ++ * ++ * This comparator searches for the next bulk Endpoint descriptor inside the current interface descriptor, aborting the ++ * search if another interface descriptor is found before the required endpoint. ++ * ++ * \return A value from the DSEARCH_Return_ErrorCodes_t enum ++ */ ++uint8_t DCOMP_NextInterfaceBulkEndpoint(void* const CurrentDescriptor) ++{ ++ USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t); ++ ++ if (Header->Type == DTYPE_Endpoint) ++ { ++ USB_Descriptor_Endpoint_t* Endpoint = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Endpoint_t); ++ ++ uint8_t EndpointType = (Endpoint->Attributes & EP_TYPE_MASK); ++ ++ if ((EndpointType == EP_TYPE_BULK) && (!(Pipe_IsEndpointBound(Endpoint->EndpointAddress)))) ++ return DESCRIPTOR_SEARCH_Found; ++ } ++ else if (Header->Type == DTYPE_Interface) ++ { ++ return DESCRIPTOR_SEARCH_Fail; ++ } ++ ++ return DESCRIPTOR_SEARCH_NotFound; ++} ++ diff --cc lib/lufa/Demos/Host/LowLevel/AndroidAccessoryHost/ConfigDescriptor.h index 000000000,000000000..f422f8c2e new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/AndroidAccessoryHost/ConfigDescriptor.h @@@ -1,0 -1,0 +1,67 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ConfigDescriptor.c. ++ */ ++ ++#ifndef _CONFIGDESCRIPTOR_H_ ++#define _CONFIGDESCRIPTOR_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ /* Macros: */ ++ /** Pipe address of the Android Accessory data IN pipe. */ ++ #define ANDROID_DATA_IN_PIPE (PIPE_DIR_IN | 1) ++ ++ /** Pipe address of the Android Accessory data OUT pipe. */ ++ #define ANDROID_DATA_OUT_PIPE (PIPE_DIR_OUT | 2) ++ ++ /* Enums: */ ++ /** Enum for the possible return codes of the \ref ProcessConfigurationDescriptor() function. */ ++ enum AndroidHost_GetConfigDescriptorDataCodes_t ++ { ++ SuccessfulConfigRead = 0, /**< Configuration Descriptor was processed successfully */ ++ DevControlError = 1, /**< A control request to the device failed to complete successfully */ ++ DescriptorTooLarge = 2, /**< The device's Configuration Descriptor is too large to process */ ++ InvalidConfigDataReturned = 3, /**< The device returned an invalid Configuration Descriptor */ ++ NoCompatibleInterfaceFound = 4, /**< A compatible interface with the required endpoints was not found */ ++ }; ++ ++ /* Function Prototypes: */ ++ uint8_t ProcessConfigurationDescriptor(void); ++ ++ uint8_t DCOMP_NextAndroidAccessoryInterface(void* const CurrentDescriptor); ++ uint8_t DCOMP_NextInterfaceBulkEndpoint(void* CurrentDescriptor); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/LowLevel/AndroidAccessoryHost/DeviceDescriptor.c index 000000000,000000000..03841a990 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/AndroidAccessoryHost/DeviceDescriptor.c @@@ -1,0 -1,0 +1,67 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 Descriptor processing routines, to determine the overall device parameters. Descriptors are special ++ * computer-readable structures which the host requests upon device enumeration, to determine information about ++ * the attached device. ++ */ ++ ++#include "DeviceDescriptor.h" ++ ++/** Reads and processes an attached device's Device Descriptor, to determine compatibility ++ * ++ * This routine checks to ensure that the attached device's VID and PID matches Google's for Android devices. ++ * ++ * \return An error code from the \ref AndroidHost_GetDeviceDescriptorDataCodes_t enum. ++ */ ++uint8_t ProcessDeviceDescriptor(void) ++{ ++ USB_Descriptor_Device_t DeviceDescriptor; ++ ++ /* Send the request to retrieve the device descriptor */ ++ if (USB_Host_GetDeviceDescriptor(&DeviceDescriptor) != HOST_SENDCONTROL_Successful) ++ return DevControlError; ++ ++ /* Validate returned data - ensure the returned data is a device descriptor */ ++ if (DeviceDescriptor.Header.Type != DTYPE_Device) ++ return InvalidDeviceDataReturned; ++ ++ /* Check the product ID to determine if the Android device is in accessory mode */ ++ if ((DeviceDescriptor.ProductID != ANDROID_ACCESSORY_PRODUCT_ID) && ++ (DeviceDescriptor.ProductID != ANDROID_ACCESSORY_ADB_PRODUCT_ID)) ++ { ++ return NonAccessoryModeAndroidDevice; ++ } ++ ++ return AccessoryModeAndroidDevice; ++} ++ diff --cc lib/lufa/Demos/Host/LowLevel/AndroidAccessoryHost/DeviceDescriptor.h index 000000000,000000000..3324b2a55 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/AndroidAccessoryHost/DeviceDescriptor.h @@@ -1,0 -1,0 +1,60 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 DeviceDescriptor.c. ++ */ ++ ++#ifndef _DEVICEDESCRIPTOR_H_ ++#define _DEVICEDESCRIPTOR_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include "AndroidAccessoryHost.h" ++ ++ /* Enums: */ ++ /** Enum for the possible return codes of the \ref ProcessDeviceDescriptor() function. */ ++ enum AndroidHost_GetDeviceDescriptorDataCodes_t ++ { ++ SuccessfulDeviceRead = 0, /**< Device Descriptor was processed successfully */ ++ ControlError = 1, /**< A control request to the device failed to complete successfully */ ++ InvalidDeviceDataReturned = 2, /**< The device returned an invalid Device Descriptor */ ++ IncorrectAndroidDevice = 3, /**< The attached device is not an Android device */ ++ NonAccessoryModeAndroidDevice = 4, /**< The attached device is an Android device in non-accessory mode */ ++ AccessoryModeAndroidDevice = 5, /**< The attached device is an Android device in accessory mode */ ++ }; ++ ++ /* Function Prototypes: */ ++ uint8_t ProcessDeviceDescriptor(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/LowLevel/AndroidAccessoryHost/Lib/AndroidAccessoryCommands.c index 000000000,000000000..7446e073a new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/AndroidAccessoryHost/Lib/AndroidAccessoryCommands.c @@@ -1,0 -1,0 +1,84 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * Android Accessory Mode utility functions, for the configuration of an attached ++ * Android device into Android Accessory Mode ready for general communication. ++ */ ++ ++#include "AndroidAccessoryCommands.h" ++ ++uint8_t Android_GetAccessoryProtocol(uint16_t* const Protocol) ++{ ++ USB_ControlRequest = (USB_Request_Header_t) ++ { ++ .bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_VENDOR | REQREC_DEVICE), ++ .bRequest = AOA_REQ_GetAccessoryProtocol, ++ .wValue = 0, ++ .wIndex = 0, ++ .wLength = sizeof(uint16_t), ++ }; ++ ++ Pipe_SelectPipe(PIPE_CONTROLPIPE); ++ return USB_Host_SendControlRequest(Protocol); ++} ++ ++uint8_t Android_SendString(const uint8_t StringIndex, ++ const char* const String) ++{ ++ USB_ControlRequest = (USB_Request_Header_t) ++ { ++ .bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_VENDOR | REQREC_DEVICE), ++ .bRequest = AOA_REQ_SendString, ++ .wValue = 0, ++ .wIndex = StringIndex, ++ .wLength = (strlen(String) + 1), ++ }; ++ ++ Pipe_SelectPipe(PIPE_CONTROLPIPE); ++ return USB_Host_SendControlRequest((char*)String); ++} ++ ++uint8_t Android_StartAccessoryMode(void) ++{ ++ USB_ControlRequest = (USB_Request_Header_t) ++ { ++ .bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_VENDOR | REQREC_DEVICE), ++ .bRequest = AOA_REQ_StartAccessoryMode, ++ .wValue = 0, ++ .wIndex = 0, ++ .wLength = 0, ++ }; ++ ++ Pipe_SelectPipe(PIPE_CONTROLPIPE); ++ return USB_Host_SendControlRequest(NULL); ++} ++ diff --cc lib/lufa/Demos/Host/LowLevel/AndroidAccessoryHost/Lib/AndroidAccessoryCommands.h index 000000000,000000000..98fb0365d new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/AndroidAccessoryHost/Lib/AndroidAccessoryCommands.h @@@ -1,0 -1,0 +1,52 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 AndroidAccessoryCommands.c. ++ */ ++ ++#ifndef _ANDROID_ACCESSORY_COMMANDS_H_ ++#define _ANDROID_ACCESSORY_COMMANDS_H_ ++ ++ /* Includes: */ ++ #include <stdint.h> ++ #include <stdbool.h> ++ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ /* Function Prototypes: */ ++ uint8_t Android_GetAccessoryProtocol(uint16_t* const Protocol); ++ uint8_t Android_SendString(const uint8_t StringIndex, ++ const char* const String); ++ uint8_t Android_StartAccessoryMode(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/LowLevel/AndroidAccessoryHost/asf.xml index 000000000,000000000..25b47661b new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/AndroidAccessoryHost/asf.xml @@@ -1,0 -1,0 +1,55 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Android Accessory Host Demo (Low Level APIs)" id="lufa.demos.host.lowlevel.android.example.avr8"> ++ <require idref="lufa.demos.host.lowlevel.android"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.host.lowlevel.android" caption="Android Accessory Host Demo (Low Level APIs)"> ++ <info type="description" value="summary"> ++ Android Accessory Host demo, implementing a basic USB device whose LEDs can be controlled via an Android device. This demo uses the Low Level LUFA APIs to manually implement a USB Class for demonstration purposes without using the simpler in-built LUFA Class Driver APIs. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Low Level APIs"/> ++ <keyword value="USB Host"/> ++ <keyword value="Android Accessory Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="AndroidAccessoryHost.txt"/> ++ ++ <build type="c-source" value="AndroidAccessoryHost.c"/> ++ <build type="c-source" value="DeviceDescriptor.c"/> ++ <build type="c-source" value="ConfigDescriptor.c"/> ++ <build type="header-file" value="AndroidAccessoryHost.h"/> ++ <build type="header-file" value="DeviceDescriptor.h"/> ++ <build type="header-file" value="ConfigDescriptor.h"/> ++ ++ <build type="c-source" value="Lib/AndroidAccessoryCommands.c"/> ++ <build type="header-file" value="Lib/AndroidAccessoryCommands.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.peripheral.usart"/> ++ <require idref="lufa.drivers.misc.ansi"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Host/LowLevel/AndroidAccessoryHost/doxyfile index 000000000,000000000..6fd6211d3 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/AndroidAccessoryHost/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Android Accessory Mode Host 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Host/LowLevel/AndroidAccessoryHost/makefile index 000000000,000000000..dff7ea60f new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/AndroidAccessoryHost/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = AndroidAccessoryHost ++SRC = $(TARGET).c ConfigDescriptor.c DeviceDescriptor.c Lib/AndroidAccessoryCommands.c $(LUFA_SRC_USB) $(LUFA_SRC_SERIAL) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Host/LowLevel/AudioInputHost/AudioInputHost.c index 000000000,000000000..9db4798a5 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/AudioInputHost/AudioInputHost.c @@@ -1,0 -1,0 +1,250 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 AudioInputHost demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "AudioInputHost.h" ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ puts_P(PSTR(ESC_FG_CYAN "Audio Input Host Demo running.\r\n" ESC_FG_WHITE)); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#endif ++ ++ /* Hardware Initialization */ ++ Serial_Init(9600, false); ++ LEDs_Init(); ++ USB_Init(); ++ ++ /* Create a stdio stream for the serial port for stdin and stdout */ ++ Serial_CreateStream(NULL); ++} ++ ++/** Event handler for the USB_DeviceAttached event. This indicates that a device has been attached to the host, and ++ * starts the library USB task to begin the enumeration and USB management process. ++ */ ++void EVENT_USB_Host_DeviceAttached(void) ++{ ++ puts_P(PSTR(ESC_FG_GREEN "Device Attached.\r\n" ESC_FG_WHITE)); ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the USB_DeviceUnattached event. This indicates that a device has been removed from the host, and ++ * stops the library USB task management process. ++ */ ++void EVENT_USB_Host_DeviceUnattached(void) ++{ ++ puts_P(PSTR(ESC_FG_GREEN "Device Unattached.\r\n" ESC_FG_WHITE)); ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_DeviceEnumerationComplete event. This indicates that a device has been successfully ++ * enumerated by the host and is now ready to be used by the application. ++ */ ++void EVENT_USB_Host_DeviceEnumerationComplete(void) ++{ ++ puts_P(PSTR("Getting Config Data.\r\n")); ++ ++ uint8_t ErrorCode; ++ ++ /* Get and process the configuration descriptor data */ ++ if ((ErrorCode = ProcessConfigurationDescriptor()) != SuccessfulConfigRead) ++ { ++ if (ErrorCode == ControlError) ++ puts_P(PSTR(ESC_FG_RED "Control Error (Get Configuration).\r\n")); ++ else ++ puts_P(PSTR(ESC_FG_RED "Invalid Device.\r\n")); ++ ++ printf_P(PSTR(" -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ /* Set the device configuration to the first configuration (rarely do devices use multiple configurations) */ ++ if ((ErrorCode = USB_Host_SetDeviceConfiguration(1)) != HOST_SENDCONTROL_Successful) ++ { ++ printf_P(PSTR(ESC_FG_RED "Control Error (Set Configuration).\r\n" ++ " -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if ((ErrorCode = USB_Host_SetInterfaceAltSetting(StreamingInterfaceIndex, ++ StreamingInterfaceAltSetting)) != HOST_SENDCONTROL_Successful) ++ { ++ printf_P(PSTR(ESC_FG_RED "Could not set alternative streaming interface setting.\r\n" ++ " -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ USB_ControlRequest = (USB_Request_Header_t) ++ { ++ .bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_ENDPOINT), ++ .bRequest = AUDIO_REQ_SetCurrent, ++ .wValue = (AUDIO_EPCONTROL_SamplingFreq << 8), ++ .wIndex = StreamingEndpointAddress, ++ .wLength = sizeof(USB_Audio_SampleFreq_t), ++ }; ++ ++ USB_Audio_SampleFreq_t SampleRate = AUDIO_SAMPLE_FREQ(48000); ++ ++ /* Select the control pipe for the request transfer */ ++ Pipe_SelectPipe(PIPE_CONTROLPIPE); ++ ++ /* Set the sample rate on the streaming interface endpoint */ ++ if ((ErrorCode = USB_Host_SendControlRequest(&SampleRate)) != HOST_SENDCONTROL_Successful) ++ { ++ printf_P(PSTR(ESC_FG_RED "Could not set requested Audio sample rate.\r\n" ++ " -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ /* Sample reload timer initialization */ ++ TIMSK0 = (1 << OCIE0A); ++ OCR0A = ((F_CPU / 8 / 48000) - 1); ++ TCCR0A = (1 << WGM01); // CTC mode ++ TCCR0B = (1 << CS01); // Fcpu/8 speed ++ ++ /* Set speaker as output */ ++ DDRC |= (1 << 6); ++ ++ /* PWM speaker timer initialization */ ++ TCCR3A = ((1 << WGM30) | (1 << COM3A1) | (1 << COM3A0)); // Set on match, clear on TOP ++ TCCR3B = ((1 << WGM32) | (1 << CS30)); // Fast 8-Bit PWM, F_CPU speed ++ ++ puts_P(PSTR("Microphone Enumerated.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++} ++ ++/** Event handler for the USB_HostError event. This indicates that a hardware error occurred while in host mode. */ ++void EVENT_USB_Host_HostError(const uint8_t ErrorCode) ++{ ++ USB_Disable(); ++ ++ printf_P(PSTR(ESC_FG_RED "Host Mode Error\r\n" ++ " -- Error Code %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ for(;;); ++} ++ ++/** Event handler for the USB_DeviceEnumerationFailed event. This indicates that a problem occurred while ++ * enumerating an attached USB device. ++ */ ++void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode) ++{ ++ printf_P(PSTR(ESC_FG_RED "Dev Enum Error\r\n" ++ " -- Error Code %d\r\n" ++ " -- Sub Error Code %d\r\n" ++ " -- In State %d\r\n" ESC_FG_WHITE), ErrorCode, SubErrorCode, USB_HostState); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++} ++ ++/** ISR to handle the reloading of the PWM timer with the next sample. */ ++ISR(TIMER0_COMPA_vect, ISR_BLOCK) ++{ ++ uint8_t PrevPipe = Pipe_GetCurrentPipe(); ++ ++ Pipe_SelectPipe(AUDIO_DATA_IN_PIPE); ++ Pipe_Unfreeze(); ++ ++ /* Check if the current pipe can be read from (contains a packet) and the device is sending data */ ++ if (Pipe_IsINReceived()) ++ { ++ /* Retrieve the signed 16-bit audio sample, convert to 8-bit */ ++ int8_t Sample_8Bit = (Pipe_Read_16_LE() >> 8); ++ ++ /* Check to see if the bank is now empty */ ++ if (!(Pipe_IsReadWriteAllowed())) ++ { ++ /* Acknowledge the packet, clear the bank ready for the next packet */ ++ Pipe_ClearIN(); ++ } ++ ++ /* Load the sample into the PWM timer channel */ ++ OCR3A = (Sample_8Bit ^ (1 << 7)); ++ ++ uint8_t LEDMask = LEDS_NO_LEDS; ++ ++ /* Turn on LEDs as the sample amplitude increases */ ++ if (Sample_8Bit > 16) ++ LEDMask = (LEDS_LED1 | LEDS_LED2 | LEDS_LED3 | LEDS_LED4); ++ else if (Sample_8Bit > 8) ++ LEDMask = (LEDS_LED1 | LEDS_LED2 | LEDS_LED3); ++ else if (Sample_8Bit > 4) ++ LEDMask = (LEDS_LED1 | LEDS_LED2); ++ else if (Sample_8Bit > 2) ++ LEDMask = (LEDS_LED1); ++ ++ LEDs_SetAllLEDs(LEDMask); ++ } ++ ++ Pipe_Freeze(); ++ Pipe_SelectPipe(PrevPipe); ++} ++ diff --cc lib/lufa/Demos/Host/LowLevel/AudioInputHost/AudioInputHost.h index 000000000,000000000..cc83270f6 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/AudioInputHost/AudioInputHost.h @@@ -1,0 -1,0 +1,79 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 AudioInputHost.c. ++ */ ++ ++#ifndef _AUDIO_INPUT_HOST_H_ ++#define _AUDIO_INPUT_HOST_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/pgmspace.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <stdio.h> ++ ++ #include <LUFA/Drivers/Misc/TerminalCodes.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Drivers/Peripheral/Serial.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Platform/Platform.h> ++ ++ #include "ConfigDescriptor.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 EVENT_USB_Host_HostError(const uint8_t ErrorCode); ++ void EVENT_USB_Host_DeviceAttached(void); ++ void EVENT_USB_Host_DeviceUnattached(void); ++ void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode); ++ void EVENT_USB_Host_DeviceEnumerationComplete(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/LowLevel/AudioInputHost/AudioInputHost.txt index 000000000,000000000..0736e0df4 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/AudioInputHost/AudioInputHost.txt @@@ -1,0 -1,0 +1,66 @@@ ++/** \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 Audio Input Host Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * ++ * \section Sec_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>Host</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Class:</b></td> ++ * <td>Audio Class</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>Standard Audio Device</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF Audio 1.0 Class Specification \n ++ * USBIF Audio 1.0 Class Terminal Types Specification \n ++ * USBIF Audio 1.0 Data Formats Specification</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Audio Input host demonstration application. This gives a simple reference ++ * application for implementing a USB Audio host, for USB Audio devices using ++ * the USB Audio 1.0 class profile. ++ * ++ * Incoming audio will output in 8-bit PWM onto the timer 3 output compare ++ * channel A, and will also be indicated on the board LEDs. Decouple the PWM ++ * output with a capacitor and attach to a speaker to hear the audio. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Host/LowLevel/AudioInputHost/Config/LUFAConfig.h index 000000000,000000000..197122fce new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/AudioInputHost/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++// #define USB_DEVICE_ONLY ++ #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++// #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++// #define FIXED_CONTROL_ENDPOINT_SIZE {Insert Value Here} ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++// #define FIXED_NUM_CONFIGURATIONS {Insert Value Here} ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Host/LowLevel/AudioInputHost/ConfigDescriptor.c index 000000000,000000000..81ebf9d85 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/AudioInputHost/ConfigDescriptor.c @@@ -1,0 -1,0 +1,220 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 Configuration Descriptor processing routines, to determine the correct pipe configurations ++ * needed to communication with an attached USB device. Descriptors are special computer-readable structures ++ * which the host requests upon device enumeration, to determine the device's capabilities and functions. ++ */ ++ ++#include "ConfigDescriptor.h" ++ ++/** Index of the currently used Audio Streaming Interface within the device. */ ++uint8_t StreamingInterfaceIndex = 0; ++ ++/** Alternative Setting of the currently used Audio Streaming Interface within the device. */ ++uint8_t StreamingInterfaceAltSetting = 0; ++ ++/** Address of the streaming audio endpoint currently in use within the device. */ ++uint8_t StreamingEndpointAddress = 0; ++ ++ ++/** Reads and processes an attached device's descriptors, to determine compatibility and pipe configurations. This ++ * routine will read in the entire configuration descriptor, and configure the hosts pipes to correctly communicate ++ * with compatible devices. ++ * ++ * This routine searches for a Streaming Audio interface descriptor containing a valid Isochronous audio endpoint. ++ * ++ * \return An error code from the \ref AudioHost_GetConfigDescriptorDataCodes_t enum. ++ */ ++uint8_t ProcessConfigurationDescriptor(void) ++{ ++ uint8_t ConfigDescriptorData[512]; ++ void* CurrConfigLocation = ConfigDescriptorData; ++ uint16_t CurrConfigBytesRem; ++ ++ USB_Descriptor_Interface_t* AudioControlInterface = NULL; ++ USB_Descriptor_Interface_t* AudioStreamingInterface = NULL; ++ USB_Descriptor_Endpoint_t* DataINEndpoint = NULL; ++ ++ /* Retrieve the entire configuration descriptor into the allocated buffer */ ++ switch (USB_Host_GetDeviceConfigDescriptor(1, &CurrConfigBytesRem, ConfigDescriptorData, sizeof(ConfigDescriptorData))) ++ { ++ case HOST_GETCONFIG_Successful: ++ break; ++ case HOST_GETCONFIG_InvalidData: ++ return InvalidConfigDataReturned; ++ case HOST_GETCONFIG_BuffOverflow: ++ return DescriptorTooLarge; ++ default: ++ return ControlError; ++ } ++ ++ while (!(DataINEndpoint)) ++ { ++ /* See if we've found a likely compatible interface, and if there is an endpoint within that interface */ ++ if (!(AudioControlInterface) || ++ USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, ++ DComp_NextAudioInterfaceDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found) ++ { ++ /* Check if we haven't found an Audio Control interface yet, or if we have run out of related Audio Streaming interfaces */ ++ if (!(AudioControlInterface) || ++ USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, ++ DComp_NextAudioStreamInterface) != DESCRIPTOR_SEARCH_COMP_Found) ++ { ++ /* Find a new Audio Control interface if the current one doesn't contain a compatible streaming interface */ ++ if (USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, ++ DComp_NextAudioControlInterface) != DESCRIPTOR_SEARCH_COMP_Found) ++ { ++ /* Descriptor not found, error out */ ++ return NoCompatibleInterfaceFound; ++ } ++ ++ /* Save the interface in case we need to refer back to it later */ ++ AudioControlInterface = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Interface_t); ++ ++ /* Find the next Audio Streaming interface within that Audio Control interface */ ++ if (USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, ++ DComp_NextAudioStreamInterface) != DESCRIPTOR_SEARCH_COMP_Found) ++ { ++ /* Descriptor not found, error out */ ++ return NoCompatibleInterfaceFound; ++ } ++ } ++ ++ /* Save the interface in case we need to refer back to it later */ ++ AudioStreamingInterface = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Interface_t); ++ ++ /* Skip the remainder of the loop as we have not found an endpoint yet */ ++ continue; ++ } ++ ++ /* Retrieve the endpoint address from the endpoint descriptor */ ++ USB_Descriptor_Endpoint_t* EndpointData = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Endpoint_t); ++ ++ /* Save the endpoint if it is an IN type endpoint */ ++ if ((EndpointData->EndpointAddress & ENDPOINT_DIR_MASK) == ENDPOINT_DIR_IN) ++ DataINEndpoint = EndpointData; ++ } ++ ++ StreamingInterfaceIndex = AudioStreamingInterface->InterfaceNumber; ++ StreamingInterfaceAltSetting = AudioStreamingInterface->AlternateSetting; ++ StreamingEndpointAddress = DataINEndpoint->EndpointAddress; ++ ++ /* Configure the Audio data IN pipe */ ++ Pipe_ConfigurePipe(AUDIO_DATA_IN_PIPE, EP_TYPE_ISOCHRONOUS, DataINEndpoint->EndpointAddress, DataINEndpoint->EndpointSize, 2); ++ ++ /* Valid data found, return success */ ++ return SuccessfulConfigRead; ++} ++ ++/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's ++ * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration ++ * descriptor processing if an incompatible descriptor configuration is found. ++ * ++ * This comparator searches for the next Interface descriptor of the correct Audio Control Class, Subclass and Protocol values. ++ * ++ * \return A value from the DSEARCH_Return_ErrorCodes_t enum ++ */ ++uint8_t DComp_NextAudioControlInterface(void* CurrentDescriptor) ++{ ++ USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t); ++ ++ if (Header->Type == DTYPE_Interface) ++ { ++ USB_Descriptor_Interface_t* Interface = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Interface_t); ++ ++ if ((Interface->Class == AUDIO_CSCP_AudioClass) && ++ (Interface->SubClass == AUDIO_CSCP_ControlSubclass) && ++ (Interface->Protocol == AUDIO_CSCP_ControlProtocol)) ++ { ++ return DESCRIPTOR_SEARCH_Found; ++ } ++ } ++ ++ return DESCRIPTOR_SEARCH_NotFound; ++} ++ ++/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's ++ * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration ++ * descriptor processing if an incompatible descriptor configuration is found. ++ * ++ * This comparator searches for the next Interface descriptor of the correct Audio Streaming Class, Subclass and Protocol values. ++ * ++ * \return A value from the DSEARCH_Return_ErrorCodes_t enum ++ */ ++uint8_t DComp_NextAudioStreamInterface(void* CurrentDescriptor) ++{ ++ USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t); ++ ++ if (Header->Type == DTYPE_Interface) ++ { ++ USB_Descriptor_Interface_t* Interface = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Interface_t); ++ ++ if ((Interface->Class == AUDIO_CSCP_AudioClass) && ++ (Interface->SubClass == AUDIO_CSCP_AudioStreamingSubclass) && ++ (Interface->Protocol == AUDIO_CSCP_StreamingProtocol)) ++ { ++ return DESCRIPTOR_SEARCH_Found; ++ } ++ } ++ ++ return DESCRIPTOR_SEARCH_NotFound; ++} ++ ++/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's ++ * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration ++ * descriptor processing if an incompatible descriptor configuration is found. ++ * ++ * This comparator searches for the next Isochronous Endpoint descriptor within the current interface, aborting the ++ * search if another interface descriptor is found before the next endpoint. ++ * ++ * \return A value from the DSEARCH_Return_ErrorCodes_t enum ++ */ ++uint8_t DComp_NextAudioInterfaceDataEndpoint(void* CurrentDescriptor) ++{ ++ USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t); ++ ++ if (Header->Type == DTYPE_Endpoint) ++ { ++ USB_Descriptor_Endpoint_t* Endpoint = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Endpoint_t); ++ ++ if ((Endpoint->Attributes & EP_TYPE_MASK) == EP_TYPE_ISOCHRONOUS) ++ return DESCRIPTOR_SEARCH_Found; ++ } ++ else if (Header->Type == DTYPE_Interface) ++ { ++ return DESCRIPTOR_SEARCH_Fail; ++ } ++ ++ return DESCRIPTOR_SEARCH_NotFound; ++} ++ diff --cc lib/lufa/Demos/Host/LowLevel/AudioInputHost/ConfigDescriptor.h index 000000000,000000000..036319d72 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/AudioInputHost/ConfigDescriptor.h @@@ -1,0 -1,0 +1,72 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ConfigDescriptor.c. ++ */ ++ ++#ifndef _CONFIGDESCRIPTOR_H_ ++#define _CONFIGDESCRIPTOR_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include "AudioInputHost.h" ++ ++ /* Macros: */ ++ /** Pipe address for the Audio data IN pipe. */ ++ #define AUDIO_DATA_IN_PIPE (PIPE_DIR_IN | 1) ++ ++ /* Enums: */ ++ /** Enum for the possible return codes of the \ref ProcessConfigurationDescriptor() function. */ ++ enum AudioHost_GetConfigDescriptorDataCodes_t ++ { ++ SuccessfulConfigRead = 0, /**< Configuration Descriptor was processed successfully */ ++ ControlError = 1, /**< A control request to the device failed to complete successfully */ ++ DescriptorTooLarge = 2, /**< The device's Configuration Descriptor is too large to process */ ++ InvalidConfigDataReturned = 3, /**< The device returned an invalid Configuration Descriptor */ ++ NoCompatibleInterfaceFound = 4, /**< A compatible interface with the required endpoints was not found */ ++ }; ++ ++ /* External Variables: */ ++ extern uint8_t StreamingInterfaceIndex; ++ extern uint8_t StreamingInterfaceAltSetting; ++ extern uint8_t StreamingEndpointAddress; ++ ++ /* Function Prototypes: */ ++ uint8_t ProcessConfigurationDescriptor(void); ++ ++ uint8_t DComp_NextAudioControlInterface(void* CurrentDescriptor); ++ uint8_t DComp_NextAudioStreamInterface(void* CurrentDescriptor); ++ uint8_t DComp_NextAudioInterfaceDataEndpoint(void* CurrentDescriptor); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/LowLevel/AudioInputHost/asf.xml index 000000000,000000000..f6defd91d new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/AudioInputHost/asf.xml @@@ -1,0 -1,0 +1,50 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Audio Input Host Demo (Low Level APIs)" id="lufa.demos.host.lowlevel.audio_input.example.avr8"> ++ <require idref="lufa.demos.host.lowlevel.audio_input"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.host.lowlevel.audio_input" caption="Audio Input Host Demo (Low Level APIs)"> ++ <info type="description" value="summary"> ++ Audio Input Host demo, implementing a basic USB audio sink that can output incoming audio data to a speaker. This demo uses the Low Level LUFA APIs to manually implement a USB Class for demonstration purposes without using the simpler in-built LUFA Class Driver APIs. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Low Level APIs"/> ++ <keyword value="USB Host"/> ++ <keyword value="Audio Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="AudioInputHost.txt"/> ++ ++ <build type="c-source" value="AudioInputHost.c"/> ++ <build type="c-source" value="ConfigDescriptor.c"/> ++ <build type="header-file" value="AudioInputHost.h"/> ++ <build type="header-file" value="ConfigDescriptor.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.peripheral.usart"/> ++ <require idref="lufa.drivers.misc.ansi"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Host/LowLevel/AudioInputHost/doxyfile index 000000000,000000000..dda008658 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/AudioInputHost/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Audio Input Host 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Host/LowLevel/AudioInputHost/makefile index 000000000,000000000..0f6098e2a new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/AudioInputHost/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = AudioInputHost ++SRC = $(TARGET).c ConfigDescriptor.c $(LUFA_SRC_USB) $(LUFA_SRC_SERIAL) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Host/LowLevel/AudioOutputHost/AudioOutputHost.c index 000000000,000000000..2e56d7f35 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/AudioOutputHost/AudioOutputHost.c @@@ -1,0 -1,0 +1,250 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 AudioOutputHost demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "AudioOutputHost.h" ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ puts_P(PSTR(ESC_FG_CYAN "Audio Output Host Demo running.\r\n" ESC_FG_WHITE)); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#endif ++ ++ /* Hardware Initialization */ ++ Serial_Init(9600, false); ++ Buttons_Init(); ++ ADC_Init(ADC_FREE_RUNNING | ADC_PRESCALE_32); ++ ADC_SetupChannel(MIC_IN_ADC_CHANNEL); ++ LEDs_Init(); ++ USB_Init(); ++ ++ /* Create a stdio stream for the serial port for stdin and stdout */ ++ Serial_CreateStream(NULL); ++ ++ /* Start the ADC conversion in free running mode */ ++ ADC_StartReading(ADC_REFERENCE_AVCC | ADC_RIGHT_ADJUSTED | ADC_GET_CHANNEL_MASK(MIC_IN_ADC_CHANNEL)); ++} ++ ++/** Event handler for the USB_DeviceAttached event. This indicates that a device has been attached to the host, and ++ * starts the library USB task to begin the enumeration and USB management process. ++ */ ++void EVENT_USB_Host_DeviceAttached(void) ++{ ++ puts_P(PSTR(ESC_FG_GREEN "Device Attached.\r\n" ESC_FG_WHITE)); ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the USB_DeviceUnattached event. This indicates that a device has been removed from the host, and ++ * stops the library USB task management process. ++ */ ++void EVENT_USB_Host_DeviceUnattached(void) ++{ ++ puts_P(PSTR(ESC_FG_GREEN "Device Unattached.\r\n" ESC_FG_WHITE)); ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_DeviceEnumerationComplete event. This indicates that a device has been successfully ++ * enumerated by the host and is now ready to be used by the application. ++ */ ++void EVENT_USB_Host_DeviceEnumerationComplete(void) ++{ ++ puts_P(PSTR("Getting Config Data.\r\n")); ++ ++ uint8_t ErrorCode; ++ ++ /* Get and process the configuration descriptor data */ ++ if ((ErrorCode = ProcessConfigurationDescriptor()) != SuccessfulConfigRead) ++ { ++ if (ErrorCode == ControlError) ++ puts_P(PSTR(ESC_FG_RED "Control Error (Get Configuration).\r\n")); ++ else ++ puts_P(PSTR(ESC_FG_RED "Invalid Device.\r\n")); ++ ++ printf_P(PSTR(" -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ /* Set the device configuration to the first configuration (rarely do devices use multiple configurations) */ ++ if ((ErrorCode = USB_Host_SetDeviceConfiguration(1)) != HOST_SENDCONTROL_Successful) ++ { ++ printf_P(PSTR(ESC_FG_RED "Control Error (Set Configuration).\r\n" ++ " -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ if ((ErrorCode = USB_Host_SetInterfaceAltSetting(StreamingInterfaceIndex, ++ StreamingInterfaceAltSetting)) != HOST_SENDCONTROL_Successful) ++ { ++ printf_P(PSTR(ESC_FG_RED "Could not set alternative streaming interface setting.\r\n" ++ " -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ USB_ControlRequest = (USB_Request_Header_t) ++ { ++ .bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_ENDPOINT), ++ .bRequest = AUDIO_REQ_SetCurrent, ++ .wValue = (AUDIO_EPCONTROL_SamplingFreq << 8), ++ .wIndex = StreamingEndpointAddress, ++ .wLength = sizeof(USB_Audio_SampleFreq_t), ++ }; ++ ++ USB_Audio_SampleFreq_t SampleRate = AUDIO_SAMPLE_FREQ(48000); ++ ++ /* Select the control pipe for the request transfer */ ++ Pipe_SelectPipe(PIPE_CONTROLPIPE); ++ ++ /* Set the sample rate on the streaming interface endpoint */ ++ if ((ErrorCode = USB_Host_SendControlRequest(&SampleRate)) != HOST_SENDCONTROL_Successful) ++ { ++ printf_P(PSTR(ESC_FG_RED "Could not set requested Audio sample rate.\r\n" ++ " -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ /* Sample reload timer initialization */ ++ TIMSK0 = (1 << OCIE0A); ++ OCR0A = ((F_CPU / 8 / 48000) - 1); ++ TCCR0A = (1 << WGM01); // CTC mode ++ TCCR0B = (1 << CS01); // Fcpu/8 speed ++ ++ puts_P(PSTR("Speaker Enumerated.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++} ++ ++/** Event handler for the USB_HostError event. This indicates that a hardware error occurred while in host mode. */ ++void EVENT_USB_Host_HostError(const uint8_t ErrorCode) ++{ ++ USB_Disable(); ++ ++ printf_P(PSTR(ESC_FG_RED "Host Mode Error\r\n" ++ " -- Error Code %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ for(;;); ++} ++ ++/** Event handler for the USB_DeviceEnumerationFailed event. This indicates that a problem occurred while ++ * enumerating an attached USB device. ++ */ ++void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode) ++{ ++ printf_P(PSTR(ESC_FG_RED "Dev Enum Error\r\n" ++ " -- Error Code %d\r\n" ++ " -- Sub Error Code %d\r\n" ++ " -- In State %d\r\n" ESC_FG_WHITE), ErrorCode, SubErrorCode, USB_HostState); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++} ++ ++/** ISR to handle the reloading of the endpoint with the next sample. */ ++ISR(TIMER0_COMPA_vect, ISR_BLOCK) ++{ ++ uint8_t PrevPipe = Pipe_GetCurrentPipe(); ++ ++ Pipe_SelectPipe(AUDIO_DATA_OUT_PIPE); ++ Pipe_Unfreeze(); ++ ++ /* Check if the current pipe can be written to (device ready for more data) */ ++ if (Pipe_IsOUTReady()) ++ { ++ int16_t AudioSample; ++ ++ #if defined(USE_TEST_TONE) ++ static uint8_t SquareWaveSampleCount; ++ static int16_t CurrentWaveValue; ++ ++ /* In test tone mode, generate a square wave at 1/256 of the sample rate */ ++ if (SquareWaveSampleCount++ == 0xFF) ++ CurrentWaveValue ^= 0x8000; ++ ++ /* Only generate audio if the board button is being pressed */ ++ AudioSample = (Buttons_GetStatus() & BUTTONS_BUTTON1) ? CurrentWaveValue : 0; ++ #else ++ /* Audio sample is ADC value scaled to fit the entire range */ ++ AudioSample = ((SAMPLE_MAX_RANGE / ADC_MAX_RANGE) * ADC_GetResult()); ++ ++ #if defined(MICROPHONE_BIASED_TO_HALF_RAIL) ++ /* Microphone is biased to half rail voltage, subtract the bias from the sample value */ ++ AudioSample -= (SAMPLE_MAX_RANGE / 2); ++ #endif ++ #endif ++ ++ Pipe_Write_16_LE(AudioSample); ++ Pipe_Write_16_LE(AudioSample); ++ ++ if (!(Pipe_IsReadWriteAllowed())) ++ Pipe_ClearOUT(); ++ } ++ ++ Pipe_Freeze(); ++ Pipe_SelectPipe(PrevPipe); ++} ++ diff --cc lib/lufa/Demos/Host/LowLevel/AudioOutputHost/AudioOutputHost.h index 000000000,000000000..a37113b84 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/AudioOutputHost/AudioOutputHost.h @@@ -1,0 -1,0 +1,88 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 AudioOutputHost.c. ++ */ ++ ++#ifndef _AUDIO_OUTPUT_HOST_H_ ++#define _AUDIO_OUTPUT_HOST_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/pgmspace.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <stdio.h> ++ ++ #include <LUFA/Drivers/Misc/TerminalCodes.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Drivers/Peripheral/Serial.h> ++ #include <LUFA/Drivers/Peripheral/ADC.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/Board/Buttons.h> ++ #include <LUFA/Platform/Platform.h> ++ ++ #include "ConfigDescriptor.h" ++ #include "Config/AppConfig.h" ++ ++ /* Macros: */ ++ /** Maximum audio sample value for the microphone input. */ ++ #define SAMPLE_MAX_RANGE 0xFFFF ++ ++ /** Maximum ADC range for the microphone input. */ ++ #define ADC_MAX_RANGE 0x3FF ++ ++ /** 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 EVENT_USB_Host_HostError(const uint8_t ErrorCode); ++ void EVENT_USB_Host_DeviceAttached(void); ++ void EVENT_USB_Host_DeviceUnattached(void); ++ void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode); ++ void EVENT_USB_Host_DeviceEnumerationComplete(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/LowLevel/AudioOutputHost/AudioOutputHost.txt index 000000000,000000000..5e79a33e3 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/AudioOutputHost/AudioOutputHost.txt @@@ -1,0 -1,0 +1,83 @@@ ++/** \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 Audio Output Host Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * ++ * \section Sec_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>Host</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Class:</b></td> ++ * <td>Audio Class</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>Standard Audio Device</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF Audio 1.0 Class Specification \n ++ * USBIF Audio 1.0 Class Terminal Types Specification \n ++ * USBIF Audio 1.0 Data Formats Specification</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Audio Output host demonstration application. This gives a simple reference ++ * application for implementing a USB Audio host, for USB Audio devices using ++ * the USB Audio 1.0 class profile. ++ * ++ * By default, the demo will produce a square wave test tone when the board ++ * button is pressed. If USE_TEST_TONE is not defined in the project makefile, ++ * incoming audio from the ADC channel 1 will be sampled and sent to the attached ++ * USB audio device instead. ++ * ++ * \section Sec_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> ++ * <th><b>Define Name:</b></th> ++ * <th><b>Location:</b></th> ++ * <th><b>Description:</b></th> ++ * </tr> ++ * <tr> ++ * <td>MIC_IN_ADC_CHANNEL</td> ++ * <td>AppConfig.h</td> ++ * <td>Sets the ADC channel used by the demo for the input audio samples from an attached microphone.</td> ++ * </tr> ++ * <tr> ++ * <td>USE_TEST_TONE</td> ++ * <td>AppConfig.h</td> ++ * <td>When defined, this alters the demo to produce a square wave test tone when the first board button is pressed ++ * instead of sampling the board microphone.</td> ++ * </tr> ++ * <tr> ++ * <td>MICROPHONE_BIASED_TO_HALF_RAIL</td> ++ * <td>AppConfig.h</td> ++ * <td>When defined, this alters the demo so that the half VCC bias of the microphone input is subtracted.</td> ++ * </tr> ++ * </table> ++ */ ++ diff --cc lib/lufa/Demos/Host/LowLevel/AudioOutputHost/Config/AppConfig.h index 000000000,000000000..ff8ed270d new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/AudioOutputHost/Config/AppConfig.h @@@ -1,0 -1,0 +1,51 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief Application Configuration Header File ++ * ++ * This is a header file which is be used to configure some of ++ * the application's compile time options, as an alternative to ++ * specifying the compile time constants supplied through a ++ * makefile or build system. ++ * ++ * For information on what each token does, refer to the ++ * \ref Sec_Options section of the application documentation. ++ */ ++ ++#ifndef _APP_CONFIG_H_ ++#define _APP_CONFIG_H_ ++ ++ #define MIC_IN_ADC_CHANNEL 2 ++ ++ #define MICROPHONE_BIASED_TO_HALF_RAIL ++ #define USE_TEST_TONE ++ ++#endif diff --cc lib/lufa/Demos/Host/LowLevel/AudioOutputHost/Config/LUFAConfig.h index 000000000,000000000..197122fce new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/AudioOutputHost/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++// #define USB_DEVICE_ONLY ++ #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++// #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++// #define FIXED_CONTROL_ENDPOINT_SIZE {Insert Value Here} ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++// #define FIXED_NUM_CONFIGURATIONS {Insert Value Here} ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Host/LowLevel/AudioOutputHost/ConfigDescriptor.c index 000000000,000000000..c9d442107 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/AudioOutputHost/ConfigDescriptor.c @@@ -1,0 -1,0 +1,220 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 Configuration Descriptor processing routines, to determine the correct pipe configurations ++ * needed to communication with an attached USB device. Descriptors are special computer-readable structures ++ * which the host requests upon device enumeration, to determine the device's capabilities and functions. ++ */ ++ ++#include "ConfigDescriptor.h" ++ ++/** Index of the currently used Audio Streaming Interface within the device. */ ++uint8_t StreamingInterfaceIndex = 0; ++ ++/** Alternative Setting of the currently used Audio Streaming Interface within the device. */ ++uint8_t StreamingInterfaceAltSetting = 0; ++ ++/** Address of the streaming audio endpoint currently in use within the device. */ ++uint8_t StreamingEndpointAddress = 0; ++ ++ ++/** Reads and processes an attached device's descriptors, to determine compatibility and pipe configurations. This ++ * routine will read in the entire configuration descriptor, and configure the hosts pipes to correctly communicate ++ * with compatible devices. ++ * ++ * This routine searches for a Streaming Audio interface descriptor containing a valid Isochronous audio endpoint. ++ * ++ * \return An error code from the \ref AudioHost_GetConfigDescriptorDataCodes_t enum. ++ */ ++uint8_t ProcessConfigurationDescriptor(void) ++{ ++ uint8_t ConfigDescriptorData[512]; ++ void* CurrConfigLocation = ConfigDescriptorData; ++ uint16_t CurrConfigBytesRem; ++ ++ USB_Descriptor_Interface_t* AudioControlInterface = NULL; ++ USB_Descriptor_Interface_t* AudioStreamingInterface = NULL; ++ USB_Descriptor_Endpoint_t* DataOUTEndpoint = NULL; ++ ++ /* Retrieve the entire configuration descriptor into the allocated buffer */ ++ switch (USB_Host_GetDeviceConfigDescriptor(1, &CurrConfigBytesRem, ConfigDescriptorData, sizeof(ConfigDescriptorData))) ++ { ++ case HOST_GETCONFIG_Successful: ++ break; ++ case HOST_GETCONFIG_InvalidData: ++ return InvalidConfigDataReturned; ++ case HOST_GETCONFIG_BuffOverflow: ++ return DescriptorTooLarge; ++ default: ++ return ControlError; ++ } ++ ++ while (!(DataOUTEndpoint)) ++ { ++ /* See if we've found a likely compatible interface, and if there is an endpoint within that interface */ ++ if (!(AudioControlInterface) || ++ USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, ++ DComp_NextAudioInterfaceDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found) ++ { ++ /* Check if we haven't found an Audio Control interface yet, or if we have run out of related Audio Streaming interfaces */ ++ if (!(AudioControlInterface) || ++ USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, ++ DComp_NextAudioStreamInterface) != DESCRIPTOR_SEARCH_COMP_Found) ++ { ++ /* Find a new Audio Control interface if the current one doesn't contain a compatible streaming interface */ ++ if (USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, ++ DComp_NextAudioControlInterface) != DESCRIPTOR_SEARCH_COMP_Found) ++ { ++ /* Descriptor not found, error out */ ++ return NoCompatibleInterfaceFound; ++ } ++ ++ /* Save the interface in case we need to refer back to it later */ ++ AudioControlInterface = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Interface_t); ++ ++ /* Find the next Audio Streaming interface within that Audio Control interface */ ++ if (USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, ++ DComp_NextAudioStreamInterface) != DESCRIPTOR_SEARCH_COMP_Found) ++ { ++ /* Descriptor not found, error out */ ++ return NoCompatibleInterfaceFound; ++ } ++ } ++ ++ /* Save the interface in case we need to refer back to it later */ ++ AudioStreamingInterface = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Interface_t); ++ ++ /* Skip the remainder of the loop as we have not found an endpoint yet */ ++ continue; ++ } ++ ++ /* Retrieve the endpoint address from the endpoint descriptor */ ++ USB_Descriptor_Endpoint_t* EndpointData = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Endpoint_t); ++ ++ /* Save the endpoint if it is an OUT type endpoint */ ++ if ((EndpointData->EndpointAddress & ENDPOINT_DIR_MASK) == ENDPOINT_DIR_OUT) ++ DataOUTEndpoint = EndpointData; ++ } ++ ++ StreamingInterfaceIndex = AudioStreamingInterface->InterfaceNumber; ++ StreamingInterfaceAltSetting = AudioStreamingInterface->AlternateSetting; ++ StreamingEndpointAddress = DataOUTEndpoint->EndpointAddress; ++ ++ /* Configure the Audio data OUT pipe */ ++ Pipe_ConfigurePipe(AUDIO_DATA_OUT_PIPE, EP_TYPE_ISOCHRONOUS, DataOUTEndpoint->EndpointAddress, DataOUTEndpoint->EndpointSize, 2); ++ ++ /* Valid data found, return success */ ++ return SuccessfulConfigRead; ++} ++ ++/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's ++ * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration ++ * descriptor processing if an incompatible descriptor configuration is found. ++ * ++ * This comparator searches for the next Interface descriptor of the correct Audio Control Class, Subclass and Protocol values. ++ * ++ * \return A value from the DSEARCH_Return_ErrorCodes_t enum ++ */ ++uint8_t DComp_NextAudioControlInterface(void* CurrentDescriptor) ++{ ++ USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t); ++ ++ if (Header->Type == DTYPE_Interface) ++ { ++ USB_Descriptor_Interface_t* Interface = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Interface_t); ++ ++ if ((Interface->Class == AUDIO_CSCP_AudioClass) && ++ (Interface->SubClass == AUDIO_CSCP_ControlSubclass) && ++ (Interface->Protocol == AUDIO_CSCP_ControlProtocol)) ++ { ++ return DESCRIPTOR_SEARCH_Found; ++ } ++ } ++ ++ return DESCRIPTOR_SEARCH_NotFound; ++} ++ ++/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's ++ * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration ++ * descriptor processing if an incompatible descriptor configuration is found. ++ * ++ * This comparator searches for the next Interface descriptor of the correct Audio Streaming Class, Subclass and Protocol values. ++ * ++ * \return A value from the DSEARCH_Return_ErrorCodes_t enum ++ */ ++uint8_t DComp_NextAudioStreamInterface(void* CurrentDescriptor) ++{ ++ USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t); ++ ++ if (Header->Type == DTYPE_Interface) ++ { ++ USB_Descriptor_Interface_t* Interface = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Interface_t); ++ ++ if ((Interface->Class == AUDIO_CSCP_AudioClass) && ++ (Interface->SubClass == AUDIO_CSCP_AudioStreamingSubclass) && ++ (Interface->Protocol == AUDIO_CSCP_StreamingProtocol)) ++ { ++ return DESCRIPTOR_SEARCH_Found; ++ } ++ } ++ ++ return DESCRIPTOR_SEARCH_NotFound; ++} ++ ++/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's ++ * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration ++ * descriptor processing if an incompatible descriptor configuration is found. ++ * ++ * This comparator searches for the next Isochronous Endpoint descriptor within the current interface, aborting the ++ * search if another interface descriptor is found before the next endpoint. ++ * ++ * \return A value from the DSEARCH_Return_ErrorCodes_t enum ++ */ ++uint8_t DComp_NextAudioInterfaceDataEndpoint(void* CurrentDescriptor) ++{ ++ USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t); ++ ++ if (Header->Type == DTYPE_Endpoint) ++ { ++ USB_Descriptor_Endpoint_t* Endpoint = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Endpoint_t); ++ ++ if ((Endpoint->Attributes & EP_TYPE_MASK) == EP_TYPE_ISOCHRONOUS) ++ return DESCRIPTOR_SEARCH_Found; ++ } ++ else if (Header->Type == DTYPE_Interface) ++ { ++ return DESCRIPTOR_SEARCH_Fail; ++ } ++ ++ return DESCRIPTOR_SEARCH_NotFound; ++} ++ diff --cc lib/lufa/Demos/Host/LowLevel/AudioOutputHost/ConfigDescriptor.h index 000000000,000000000..0ed865edc new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/AudioOutputHost/ConfigDescriptor.h @@@ -1,0 -1,0 +1,73 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ConfigDescriptor.c. ++ */ ++ ++#ifndef _CONFIGDESCRIPTOR_H_ ++#define _CONFIGDESCRIPTOR_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include "AudioOutputHost.h" ++ #include "Config/AppConfig.h" ++ ++ /* Macros: */ ++ /** Pipe address for the Audio data OUT pipe. */ ++ #define AUDIO_DATA_OUT_PIPE (PIPE_DIR_OUT | 1) ++ ++ /* Enums: */ ++ /** Enum for the possible return codes of the \ref ProcessConfigurationDescriptor() function. */ ++ enum AudioHost_GetConfigDescriptorDataCodes_t ++ { ++ SuccessfulConfigRead = 0, /**< Configuration Descriptor was processed successfully */ ++ ControlError = 1, /**< A control request to the device failed to complete successfully */ ++ DescriptorTooLarge = 2, /**< The device's Configuration Descriptor is too large to process */ ++ InvalidConfigDataReturned = 3, /**< The device returned an invalid Configuration Descriptor */ ++ NoCompatibleInterfaceFound = 4, /**< A compatible interface with the required endpoints was not found */ ++ }; ++ ++ /* External Variables: */ ++ extern uint8_t StreamingInterfaceIndex; ++ extern uint8_t StreamingInterfaceAltSetting; ++ extern uint8_t StreamingEndpointAddress; ++ ++ /* Function Prototypes: */ ++ uint8_t ProcessConfigurationDescriptor(void); ++ ++ uint8_t DComp_NextAudioControlInterface(void* CurrentDescriptor); ++ uint8_t DComp_NextAudioStreamInterface(void* CurrentDescriptor); ++ uint8_t DComp_NextAudioInterfaceDataEndpoint(void* CurrentDescriptor); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/LowLevel/AudioOutputHost/asf.xml index 000000000,000000000..ebc1587c6 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/AudioOutputHost/asf.xml @@@ -1,0 -1,0 +1,54 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Audio Output Host Demo (Low Level APIs)" id="lufa.demos.host.lowlevel.audio_output.example.avr8"> ++ <require idref="lufa.demos.host.lowlevel.audio_output"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.host.lowlevel.audio_output" caption="Audio Output Host Demo (Low Level APIs)"> ++ <info type="description" value="summary"> ++ Audio Output Host demo, implementing a basic USB audio source that can output audio data to an attached device. This demo uses the Low Level LUFA APIs to manually implement a USB Class for demonstration purposes without using the simpler in-built LUFA Class Driver APIs. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Low Level APIs"/> ++ <keyword value="USB Host"/> ++ <keyword value="Audio Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="AudioOutputHost.txt"/> ++ ++ <build type="c-source" value="AudioOutputHost.c"/> ++ <build type="c-source" value="ConfigDescriptor.c"/> ++ <build type="header-file" value="AudioOutputHost.h"/> ++ <build type="header-file" value="ConfigDescriptor.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="module-config" subtype="required-header-file" value="AppConfig.h"/> ++ <build type="header-file" value="Config/AppConfig.h"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.peripheral.usart"/> ++ <require idref="lufa.drivers.peripheral.adc"/> ++ <require idref="lufa.drivers.misc.ansi"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ <require idref="lufa.drivers.board.buttons"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Host/LowLevel/AudioOutputHost/doxyfile index 000000000,000000000..c27221c69 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/AudioOutputHost/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Audio Output Host 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Host/LowLevel/AudioOutputHost/makefile index 000000000,000000000..b5acb9b29 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/AudioOutputHost/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = AudioOutputHost ++SRC = $(TARGET).c ConfigDescriptor.c $(LUFA_SRC_USB) $(LUFA_SRC_SERIAL) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Host/LowLevel/GenericHIDHost/Config/LUFAConfig.h index 000000000,000000000..197122fce new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/GenericHIDHost/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++// #define USB_DEVICE_ONLY ++ #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++// #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++// #define FIXED_CONTROL_ENDPOINT_SIZE {Insert Value Here} ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++// #define FIXED_NUM_CONFIGURATIONS {Insert Value Here} ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Host/LowLevel/GenericHIDHost/ConfigDescriptor.c index 000000000,000000000..c98f0fbce new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/GenericHIDHost/ConfigDescriptor.c @@@ -1,0 -1,0 +1,183 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 Configuration Descriptor processing routines, to determine the correct pipe configurations ++ * needed to communication with an attached USB device. Descriptors are special computer-readable structures ++ * which the host requests upon device enumeration, to determine the device's capabilities and functions. ++ */ ++ ++#include "ConfigDescriptor.h" ++ ++/** Reads and processes an attached device's descriptors, to determine compatibility and pipe configurations. This ++ * routine will read in the entire configuration descriptor, and configure the hosts pipes to correctly communicate ++ * with compatible devices. ++ * ++ * This routine searches for a HID interface descriptor containing at least one Interrupt type IN endpoint. ++ * ++ * \return An error code from the \ref GenericHIDHost_GetConfigDescriptorDataCodes_t enum. ++ */ ++uint8_t ProcessConfigurationDescriptor(void) ++{ ++ uint8_t ConfigDescriptorData[512]; ++ void* CurrConfigLocation = ConfigDescriptorData; ++ uint16_t CurrConfigBytesRem; ++ ++ USB_Descriptor_Interface_t* HIDInterface = NULL; ++ USB_Descriptor_Endpoint_t* DataINEndpoint = NULL; ++ USB_Descriptor_Endpoint_t* DataOUTEndpoint = NULL; ++ ++ /* Retrieve the entire configuration descriptor into the allocated buffer */ ++ switch (USB_Host_GetDeviceConfigDescriptor(1, &CurrConfigBytesRem, ConfigDescriptorData, sizeof(ConfigDescriptorData))) ++ { ++ case HOST_GETCONFIG_Successful: ++ break; ++ case HOST_GETCONFIG_InvalidData: ++ return InvalidConfigDataReturned; ++ case HOST_GETCONFIG_BuffOverflow: ++ return DescriptorTooLarge; ++ default: ++ return ControlError; ++ } ++ ++ while (!(DataINEndpoint) || !(DataOUTEndpoint)) ++ { ++ /* See if we've found a likely compatible interface, and if there is an endpoint within that interface */ ++ if (!(HIDInterface) || ++ USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, ++ DComp_NextHIDInterfaceDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found) ++ { ++ /* Not all HID devices have an OUT endpoint - if we've reached the end of the HID descriptor ++ * but only found the mandatory IN endpoint, it's safe to continue with the device enumeration */ ++ if (DataINEndpoint) ++ break; ++ ++ /* Get the next HID interface from the configuration descriptor */ ++ if (USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, ++ DComp_NextHIDInterface) != DESCRIPTOR_SEARCH_COMP_Found) ++ { ++ /* Descriptor not found, error out */ ++ return NoCompatibleInterfaceFound; ++ } ++ ++ /* Save the interface in case we need to refer back to it later */ ++ HIDInterface = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Interface_t); ++ ++ /* Clear any found endpoints */ ++ DataOUTEndpoint = NULL; ++ ++ /* Skip the remainder of the loop as we have not found an endpoint yet */ ++ continue; ++ } ++ ++ /* Retrieve the endpoint address from the endpoint descriptor */ ++ USB_Descriptor_Endpoint_t* EndpointData = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Endpoint_t); ++ ++ /* If the endpoint is a IN type endpoint */ ++ if ((EndpointData->EndpointAddress & ENDPOINT_DIR_MASK) == ENDPOINT_DIR_IN) ++ DataINEndpoint = EndpointData; ++ else ++ DataOUTEndpoint = EndpointData; ++ } ++ ++ /* Configure the HID data IN pipe */ ++ Pipe_ConfigurePipe(HID_DATA_IN_PIPE, EP_TYPE_INTERRUPT, DataINEndpoint->EndpointAddress, DataINEndpoint->EndpointSize, 1); ++ Pipe_SetInterruptPeriod(DataINEndpoint->PollingIntervalMS); ++ ++ /* Check if the HID interface contained an optional OUT data endpoint */ ++ if (DataOUTEndpoint) ++ { ++ /* Configure the HID data OUT pipe */ ++ Pipe_ConfigurePipe(HID_DATA_OUT_PIPE, EP_TYPE_INTERRUPT, DataOUTEndpoint->EndpointAddress, DataOUTEndpoint->EndpointSize, 1); ++ } ++ ++ /* Valid data found, return success */ ++ return SuccessfulConfigRead; ++} ++ ++/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's ++ * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration ++ * descriptor processing if an incompatible descriptor configuration is found. ++ * ++ * This comparator searches for the next Interface descriptor of the correct HID Class value. ++ * ++ * \return A value from the DSEARCH_Return_ErrorCodes_t enum ++ */ ++uint8_t DComp_NextHIDInterface(void* CurrentDescriptor) ++{ ++ USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t); ++ ++ /* Determine if the current descriptor is an interface descriptor */ ++ if (Header->Type == DTYPE_Interface) ++ { ++ USB_Descriptor_Interface_t* Interface = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Interface_t); ++ ++ /* Check the HID descriptor class, break out if correct class/protocol interface found */ ++ if (Interface->Class == HID_CSCP_HIDClass) ++ { ++ /* Indicate that the descriptor being searched for has been found */ ++ return DESCRIPTOR_SEARCH_Found; ++ } ++ } ++ ++ /* Current descriptor does not match what this comparator is looking for */ ++ return DESCRIPTOR_SEARCH_NotFound; ++} ++ ++/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's ++ * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration ++ * descriptor processing if an incompatible descriptor configuration is found. ++ * ++ * This comparator searches for the next Endpoint descriptor inside the current interface descriptor, ++ * aborting the search if another interface descriptor is found before the required endpoint. ++ * ++ * \return A value from the DSEARCH_Return_ErrorCodes_t enum ++ */ ++uint8_t DComp_NextHIDInterfaceDataEndpoint(void* CurrentDescriptor) ++{ ++ USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t); ++ ++ /* Determine the type of the current descriptor */ ++ if (Header->Type == DTYPE_Endpoint) ++ { ++ /* Indicate that the descriptor being searched for has been found */ ++ return DESCRIPTOR_SEARCH_Found; ++ } ++ else if (Header->Type == DTYPE_Interface) ++ { ++ /* Indicate that the search has failed prematurely and should be aborted */ ++ return DESCRIPTOR_SEARCH_Fail; ++ } ++ ++ /* Current descriptor does not match what this comparator is looking for */ ++ return DESCRIPTOR_SEARCH_NotFound; ++} ++ diff --cc lib/lufa/Demos/Host/LowLevel/GenericHIDHost/ConfigDescriptor.h index 000000000,000000000..8e7289124 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/GenericHIDHost/ConfigDescriptor.h @@@ -1,0 -1,0 +1,69 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ConfigDescriptor.c. ++ */ ++ ++#ifndef _CONFIGDESCRIPTOR_H_ ++#define _CONFIGDESCRIPTOR_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include "GenericHIDHost.h" ++ ++ /* Macros: */ ++ /** Pipe address for the HID data IN pipe. */ ++ #define HID_DATA_IN_PIPE (PIPE_DIR_IN | 1) ++ ++ /** Pipe address for the HID data OUT pipe. */ ++ #define HID_DATA_OUT_PIPE (PIPE_DIR_OUT | 2) ++ ++ /* Enums: */ ++ /** Enum for the possible return codes of the \ref ProcessConfigurationDescriptor() function. */ ++ enum GenericHIDHost_GetConfigDescriptorDataCodes_t ++ { ++ SuccessfulConfigRead = 0, /**< Configuration Descriptor was processed successfully */ ++ ControlError = 1, /**< A control request to the device failed to complete successfully */ ++ DescriptorTooLarge = 2, /**< The device's Configuration Descriptor is too large to process */ ++ InvalidConfigDataReturned = 3, /**< The device returned an invalid Configuration Descriptor */ ++ NoCompatibleInterfaceFound = 4, /**< A compatible interface with the required endpoints was not found */ ++ }; ++ ++ /* Function Prototypes: */ ++ uint8_t ProcessConfigurationDescriptor(void); ++ ++ uint8_t DComp_NextHIDInterface(void* CurrentDescriptor); ++ uint8_t DComp_NextHIDInterfaceDataEndpoint(void* CurrentDescriptor); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/LowLevel/GenericHIDHost/GenericHIDHost.c index 000000000,000000000..413ce375b new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/GenericHIDHost/GenericHIDHost.c @@@ -1,0 -1,0 +1,269 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 GenericHIDHost demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "GenericHIDHost.h" ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ puts_P(PSTR(ESC_FG_CYAN "Generic HID Host Demo running.\r\n" ESC_FG_WHITE)); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ ReadNextReport(); ++ ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#endif ++ ++ /* Hardware Initialization */ ++ Serial_Init(9600, false); ++ LEDs_Init(); ++ USB_Init(); ++ ++ /* Create a stdio stream for the serial port for stdin and stdout */ ++ Serial_CreateStream(NULL); ++} ++ ++/** Event handler for the USB_DeviceAttached event. This indicates that a device has been attached to the host, and ++ * starts the library USB task to begin the enumeration and USB management process. ++ */ ++void EVENT_USB_Host_DeviceAttached(void) ++{ ++ puts_P(PSTR(ESC_FG_GREEN "Device Attached.\r\n" ESC_FG_WHITE)); ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the USB_DeviceUnattached event. This indicates that a device has been removed from the host, and ++ * stops the library USB task management process. ++ */ ++void EVENT_USB_Host_DeviceUnattached(void) ++{ ++ puts_P(PSTR(ESC_FG_GREEN "Device Unattached.\r\n" ESC_FG_WHITE)); ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_DeviceEnumerationComplete event. This indicates that a device has been successfully ++ * enumerated by the host and is now ready to be used by the application. ++ */ ++void EVENT_USB_Host_DeviceEnumerationComplete(void) ++{ ++ puts_P(PSTR("Getting Config Data.\r\n")); ++ ++ uint8_t ErrorCode; ++ ++ /* Get and process the configuration descriptor data */ ++ if ((ErrorCode = ProcessConfigurationDescriptor()) != SuccessfulConfigRead) ++ { ++ if (ErrorCode == ControlError) ++ puts_P(PSTR(ESC_FG_RED "Control Error (Get Configuration).\r\n")); ++ else ++ puts_P(PSTR(ESC_FG_RED "Invalid Device.\r\n")); ++ ++ printf_P(PSTR(" -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ /* Set the device configuration to the first configuration (rarely do devices use multiple configurations) */ ++ if ((ErrorCode = USB_Host_SetDeviceConfiguration(1)) != HOST_SENDCONTROL_Successful) ++ { ++ printf_P(PSTR(ESC_FG_RED "Control Error (Set Configuration).\r\n" ++ " -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ puts_P(PSTR("HID Device Enumerated.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++} ++ ++/** Event handler for the USB_HostError event. This indicates that a hardware error occurred while in host mode. */ ++void EVENT_USB_Host_HostError(const uint8_t ErrorCode) ++{ ++ USB_Disable(); ++ ++ printf_P(PSTR(ESC_FG_RED "Host Mode Error\r\n" ++ " -- Error Code %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ for(;;); ++} ++ ++/** Event handler for the USB_DeviceEnumerationFailed event. This indicates that a problem occurred while ++ * enumerating an attached USB device. ++ */ ++void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode) ++{ ++ printf_P(PSTR(ESC_FG_RED "Dev Enum Error\r\n" ++ " -- Error Code %d\r\n" ++ " -- Sub Error Code %d\r\n" ++ " -- In State %d\r\n" ESC_FG_WHITE), ErrorCode, SubErrorCode, USB_HostState); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++} ++ ++/** Reads in and processes the next report from the attached device, displaying the report ++ * contents on the board LEDs and via the serial port. ++ */ ++void ReadNextReport(void) ++{ ++ if (USB_HostState != HOST_STATE_Configured) ++ return; ++ ++ /* Select and unfreeze HID data IN pipe */ ++ Pipe_SelectPipe(HID_DATA_IN_PIPE); ++ Pipe_Unfreeze(); ++ ++ /* Check to see if a packet has been received */ ++ if (!(Pipe_IsINReceived())) ++ { ++ /* Refreeze HID data IN pipe */ ++ Pipe_Freeze(); ++ ++ return; ++ } ++ ++ /* Ensure pipe contains data before trying to read from it */ ++ if (Pipe_IsReadWriteAllowed()) ++ { ++ uint8_t ReportINData[Pipe_BytesInPipe()]; ++ ++ /* Read in HID report data */ ++ Pipe_Read_Stream_LE(&ReportINData, sizeof(ReportINData), NULL); ++ ++ /* Print report data through the serial port */ ++ for (uint16_t CurrByte = 0; CurrByte < sizeof(ReportINData); CurrByte++) ++ printf_P(PSTR("0x%02X "), ReportINData[CurrByte]); ++ ++ puts_P(PSTR("\r\n")); ++ } ++ ++ /* Clear the IN endpoint, ready for next data packet */ ++ Pipe_ClearIN(); ++ ++ /* Refreeze HID data IN pipe */ ++ Pipe_Freeze(); ++} ++ ++/** Writes a report to the attached device. ++ * ++ * \param[in] ReportOUTData Buffer containing the report to send to the device ++ * \param[in] ReportIndex Index of the report in the device (zero if the device does not use multiple reports) ++ * \param[in] ReportType Type of report to send, either REPORT_TYPE_OUT or REPORT_TYPE_FEATURE ++ * \param[in] ReportLength Length of the report to send ++ */ ++void WriteNextReport(uint8_t* ReportOUTData, ++ const uint8_t ReportIndex, ++ const uint8_t ReportType, ++ uint16_t ReportLength) ++{ ++ if (USB_HostState != HOST_STATE_Configured) ++ return; ++ ++ /* Select the HID data OUT pipe */ ++ Pipe_SelectPipe(HID_DATA_OUT_PIPE); ++ ++ /* Not all HID devices have an OUT endpoint (some require OUT reports to be sent over the ++ * control endpoint instead) - check to see if the OUT endpoint has been initialized */ ++ if (Pipe_IsConfigured() && (ReportType == REPORT_TYPE_OUT)) ++ { ++ Pipe_Unfreeze(); ++ ++ /* Ensure pipe is ready to be written to before continuing */ ++ if (!(Pipe_IsOUTReady())) ++ { ++ /* Refreeze the data OUT pipe */ ++ Pipe_Freeze(); ++ ++ return; ++ } ++ ++ /* If the report index is used, send it before the report data */ ++ if (ReportIndex) ++ Pipe_Write_8(ReportIndex); ++ ++ /* Write out HID report data */ ++ Pipe_Write_Stream_LE(ReportOUTData, ReportLength, NULL); ++ ++ /* Clear the OUT endpoint, send last data packet */ ++ Pipe_ClearOUT(); ++ ++ /* Refreeze the data OUT pipe */ ++ Pipe_Freeze(); ++ } ++ else ++ { ++ /* Class specific request to send a HID report to the device */ ++ USB_ControlRequest = (USB_Request_Header_t) ++ { ++ .bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE), ++ .bRequest = HID_REQ_SetReport, ++ .wValue = ((ReportType << 8) | ReportIndex), ++ .wIndex = 0, ++ .wLength = ReportLength, ++ }; ++ ++ /* Select the control pipe for the request transfer */ ++ Pipe_SelectPipe(PIPE_CONTROLPIPE); ++ ++ /* Send the request to the device */ ++ USB_Host_SendControlRequest(ReportOUTData); ++ } ++} ++ diff --cc lib/lufa/Demos/Host/LowLevel/GenericHIDHost/GenericHIDHost.h index 000000000,000000000..39ee9ed1c new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/GenericHIDHost/GenericHIDHost.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 GenericHIDHost.c. ++ */ ++ ++#ifndef _GENERICHID_HOST_H_ ++#define _GENERICHID_HOST_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/pgmspace.h> ++ #include <avr/interrupt.h> ++ #include <avr/power.h> ++ #include <stdio.h> ++ ++ #include <LUFA/Drivers/Misc/TerminalCodes.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Drivers/Peripheral/Serial.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Platform/Platform.h> ++ ++ #include "ConfigDescriptor.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) ++ ++ /** HID Report Type to indicate an IN report. */ ++ #define REPORT_TYPE_IN 1 ++ ++ /** HID Report Type to indicate an OUT report. */ ++ #define REPORT_TYPE_OUT 2 ++ ++ /** HID Report Type to indicate a FEATURE report. */ ++ #define REPORT_TYPE_FEATURE 3 ++ ++ /* Function Prototypes: */ ++ void SetupHardware(void); ++ void ReadNextReport(void); ++ void WriteNextReport(uint8_t* ReportOUTData, ++ const uint8_t ReportIndex, ++ const uint8_t ReportType, ++ uint16_t ReportLength); ++ ++ void EVENT_USB_Host_HostError(const uint8_t ErrorCode); ++ void EVENT_USB_Host_DeviceAttached(void); ++ void EVENT_USB_Host_DeviceUnattached(void); ++ void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode); ++ void EVENT_USB_Host_DeviceEnumerationComplete(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/LowLevel/GenericHIDHost/GenericHIDHost.txt index 000000000,000000000..1c9b1875a new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/GenericHIDHost/GenericHIDHost.txt @@@ -1,0 -1,0 +1,64 @@@ ++/** \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 Generic HID Host Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * ++ * \section Sec_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>Host</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Class:</b></td> ++ * <td>Human Interface Device (HID)</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>N/A</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF HID Specification \n ++ * USBIF HID Usage Tables</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Low Speed Mode \n ++ * Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Generic HID host demonstration application. This gives a simple reference ++ * application for implementing a Generic HID USB host, for any device implementing ++ * the HID profile. ++ * ++ * Received reports from the attached device are printed to the serial port. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Host/LowLevel/GenericHIDHost/asf.xml index 000000000,000000000..2321a8139 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/GenericHIDHost/asf.xml @@@ -1,0 -1,0 +1,50 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Generic HID Host Demo (Low Level APIs)" id="lufa.demos.host.lowlevel.generic_hid.example.avr8"> ++ <require idref="lufa.demos.host.lowlevel.generic_hid"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.host.lowlevel.generic_hid" caption="Generic HID Host Demo (Low Level APIs)"> ++ <info type="description" value="summary"> ++ Generic HID Host demo, implementing a basic USB HID device that can send and receive data to and from an attached device. This demo uses the Low Level LUFA APIs to manually implement a USB Class for demonstration purposes without using the simpler in-built LUFA Class Driver APIs. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Low Level APIs"/> ++ <keyword value="USB Host"/> ++ <keyword value="HID Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="GenericHIDHost.txt"/> ++ ++ <build type="c-source" value="GenericHIDHost.c"/> ++ <build type="c-source" value="ConfigDescriptor.c"/> ++ <build type="header-file" value="GenericHIDHost.h"/> ++ <build type="header-file" value="ConfigDescriptor.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.peripheral.usart"/> ++ <require idref="lufa.drivers.misc.ansi"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Host/LowLevel/GenericHIDHost/doxyfile index 000000000,000000000..1a8704264 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/GenericHIDHost/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Generic HID Host 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Host/LowLevel/GenericHIDHost/makefile index 000000000,000000000..e42dad772 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/GenericHIDHost/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = GenericHIDHost ++SRC = $(TARGET).c ConfigDescriptor.c $(LUFA_SRC_USB) $(LUFA_SRC_SERIAL) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Host/LowLevel/JoystickHostWithParser/Config/LUFAConfig.h index 000000000,000000000..197122fce new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/JoystickHostWithParser/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++// #define USB_DEVICE_ONLY ++ #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++// #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++// #define FIXED_CONTROL_ENDPOINT_SIZE {Insert Value Here} ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++// #define FIXED_NUM_CONFIGURATIONS {Insert Value Here} ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Host/LowLevel/JoystickHostWithParser/ConfigDescriptor.c index 000000000,000000000..5bfc1a9be new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/JoystickHostWithParser/ConfigDescriptor.c @@@ -1,0 -1,0 +1,187 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 Configuration Descriptor processing routines, to determine the correct pipe configurations ++ * needed to communication with an attached USB device. Descriptors are special computer-readable structures ++ * which the host requests upon device enumeration, to determine the device's capabilities and functions. ++ */ ++ ++#include "ConfigDescriptor.h" ++ ++/** Reads and processes an attached device's descriptors, to determine compatibility and pipe configurations. This ++ * routine will read in the entire configuration descriptor, and configure the hosts pipes to correctly communicate ++ * with compatible devices. ++ * ++ * This routine searches for a HID interface descriptor containing at least one Interrupt type IN endpoint and HID descriptor. ++ * ++ * \return An error code from the \ref JoystickHostWithParser_GetConfigDescriptorDataCodes_t enum. ++ */ ++uint8_t ProcessConfigurationDescriptor(void) ++{ ++ uint8_t ConfigDescriptorData[512]; ++ void* CurrConfigLocation = ConfigDescriptorData; ++ uint16_t CurrConfigBytesRem; ++ ++ USB_Descriptor_Interface_t* HIDInterface = NULL; ++ USB_HID_Descriptor_HID_t* HIDDescriptor = NULL; ++ USB_Descriptor_Endpoint_t* DataINEndpoint = NULL; ++ ++ /* Retrieve the entire configuration descriptor into the allocated buffer */ ++ switch (USB_Host_GetDeviceConfigDescriptor(1, &CurrConfigBytesRem, ConfigDescriptorData, sizeof(ConfigDescriptorData))) ++ { ++ case HOST_GETCONFIG_Successful: ++ break; ++ case HOST_GETCONFIG_InvalidData: ++ return InvalidConfigDataReturned; ++ case HOST_GETCONFIG_BuffOverflow: ++ return DescriptorTooLarge; ++ default: ++ return ControlError; ++ } ++ ++ while (!(DataINEndpoint)) ++ { ++ /* See if we've found a likely compatible interface, and if there is an endpoint within that interface */ ++ if (!(HIDInterface) || ++ USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, ++ DComp_NextJoystickInterfaceDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found) ++ { ++ /* Get the next HID interface from the configuration descriptor */ ++ if (USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, ++ DComp_NextJoystickInterface) != DESCRIPTOR_SEARCH_COMP_Found) ++ { ++ /* Descriptor not found, error out */ ++ return NoCompatibleInterfaceFound; ++ } ++ ++ /* Save the interface in case we need to refer back to it later */ ++ HIDInterface = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Interface_t); ++ ++ /* Get the HID descriptor from the configuration descriptor */ ++ if (USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, ++ DComp_NextHID) != DESCRIPTOR_SEARCH_COMP_Found) ++ { ++ /* Descriptor not found, error out */ ++ return NoCompatibleInterfaceFound; ++ } ++ ++ /* Save the HID descriptor for later use */ ++ HIDDescriptor = DESCRIPTOR_PCAST(CurrConfigLocation, USB_HID_Descriptor_HID_t); ++ ++ /* Skip the remainder of the loop as we have not found an endpoint yet */ ++ continue; ++ } ++ ++ /* Retrieve the endpoint address from the endpoint descriptor */ ++ USB_Descriptor_Endpoint_t* EndpointData = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Endpoint_t); ++ ++ /* If the endpoint is a IN type endpoint */ ++ if ((EndpointData->EndpointAddress & ENDPOINT_DIR_MASK) == ENDPOINT_DIR_IN) ++ DataINEndpoint = EndpointData; ++ } ++ ++ /* Configure the HID data IN pipe */ ++ Pipe_ConfigurePipe(JOYSTICK_DATA_IN_PIPE, EP_TYPE_INTERRUPT, DataINEndpoint->EndpointAddress, DataINEndpoint->EndpointSize, 1); ++ Pipe_SetInterruptPeriod(DataINEndpoint->PollingIntervalMS); ++ ++ /* Get the HID report size from the HID report descriptor */ ++ HIDReportSize = HIDDescriptor->HIDReportLength; ++ ++ /* Valid data found, return success */ ++ return SuccessfulConfigRead; ++} ++ ++/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's ++ * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration ++ * descriptor processing if an incompatible descriptor configuration is found. ++ * ++ * This comparator searches for the next Interface descriptor of the correct Joystick HID Class and Protocol values. ++ * ++ * \return A value from the DSEARCH_Return_ErrorCodes_t enum ++ */ ++uint8_t DComp_NextJoystickInterface(void* CurrentDescriptor) ++{ ++ USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t); ++ ++ if (Header->Type == DTYPE_Interface) ++ { ++ USB_Descriptor_Interface_t* Interface = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Interface_t); ++ ++ /* Check the HID descriptor class, break out if correct class interface found */ ++ if ((Interface->Class == HID_CSCP_HIDClass)) ++ { ++ return DESCRIPTOR_SEARCH_Found; ++ } ++ } ++ ++ return DESCRIPTOR_SEARCH_NotFound; ++} ++ ++/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's ++ * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration ++ * descriptor processing if an incompatible descriptor configuration is found. ++ * ++ * This comparator searches for the next Endpoint descriptor inside the current interface descriptor, aborting the ++ * search if another interface descriptor is found before the required endpoint. ++ * ++ * \return A value from the DSEARCH_Return_ErrorCodes_t enum ++ */ ++uint8_t DComp_NextJoystickInterfaceDataEndpoint(void* CurrentDescriptor) ++{ ++ USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t); ++ ++ if (Header->Type == DTYPE_Endpoint) ++ return DESCRIPTOR_SEARCH_Found; ++ else if (Header->Type == DTYPE_Interface) ++ return DESCRIPTOR_SEARCH_Fail; ++ else ++ return DESCRIPTOR_SEARCH_NotFound; ++} ++ ++/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's ++ * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration ++ * descriptor processing if an incompatible descriptor configuration is found. ++ * ++ * This comparator searches for the next HID descriptor within the current HID interface descriptor. ++ * ++ * \return A value from the DSEARCH_Return_ErrorCodes_t enum ++ */ ++uint8_t DComp_NextHID(void* CurrentDescriptor) ++{ ++ USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t); ++ ++ if (Header->Type == HID_DTYPE_HID) ++ return DESCRIPTOR_SEARCH_Found; ++ else ++ return DESCRIPTOR_SEARCH_NotFound; ++} ++ diff --cc lib/lufa/Demos/Host/LowLevel/JoystickHostWithParser/ConfigDescriptor.h index 000000000,000000000..fccf5ebc1 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/JoystickHostWithParser/ConfigDescriptor.h @@@ -1,0 -1,0 +1,69 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ConfigDescriptor.c. ++ */ ++ ++#ifndef _CONFIGDESCRIPTOR_H_ ++#define _CONFIGDESCRIPTOR_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include "HIDReport.h" ++ ++ /* Macros: */ ++ /** Pipe address for the joystick report data pipe. */ ++ #define JOYSTICK_DATA_IN_PIPE (PIPE_DIR_IN | 1) ++ ++ /* Enums: */ ++ /** Enum for the possible return codes of the \ref ProcessConfigurationDescriptor() function. */ ++ enum JoystickHostWithParser_GetConfigDescriptorDataCodes_t ++ { ++ SuccessfulConfigRead = 0, /**< Configuration Descriptor was processed successfully */ ++ ControlError = 1, /**< A control request to the device failed to complete successfully */ ++ DescriptorTooLarge = 2, /**< The device's Configuration Descriptor is too large to process */ ++ InvalidConfigDataReturned = 3, /**< The device returned an invalid Configuration Descriptor */ ++ NoHIDInterfaceFound = 4, /**< A compatible HID interface was not found in the device's Configuration Descriptor */ ++ NoHIDDescriptorFound = 5, /**< A compatible HID descriptor was not found in the device's HID interface */ ++ NoCompatibleInterfaceFound = 4, /**< A compatible interface with the required endpoints was not found */ ++ }; ++ ++ /* Function Prototypes: */ ++ uint8_t ProcessConfigurationDescriptor(void); ++ ++ uint8_t DComp_NextJoystickInterface(void* CurrentDescriptor); ++ uint8_t DComp_NextJoystickInterfaceDataEndpoint(void* CurrentDescriptor); ++ uint8_t DComp_NextHID(void* CurrentDescriptor); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/LowLevel/JoystickHostWithParser/HIDReport.c index 000000000,000000000..dadbb395d new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/JoystickHostWithParser/HIDReport.c @@@ -1,0 -1,0 +1,111 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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. ++*/ ++ ++#include "HIDReport.h" ++ ++/** Size in bytes of the attached device's HID report descriptor */ ++uint16_t HIDReportSize; ++ ++/** Processed HID report descriptor items structure, containing information on each HID report element */ ++HID_ReportInfo_t HIDReportInfo; ++ ++ ++/** Function to read in the HID report descriptor from the attached device, and process it into easy-to-read ++ * structures via the HID parser routines in the LUFA library. ++ * ++ * \return A value from the \ref JoystickHostWithParser_GetHIDReportDataCodes_t enum ++ */ ++uint8_t GetHIDReportData(void) ++{ ++ /* Create a buffer big enough to hold the entire returned HID report */ ++ uint8_t HIDReportData[HIDReportSize]; ++ ++ USB_ControlRequest = (USB_Request_Header_t) ++ { ++ .bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_INTERFACE), ++ .bRequest = REQ_GetDescriptor, ++ .wValue = (HID_DTYPE_Report << 8), ++ .wIndex = 0, ++ .wLength = HIDReportSize, ++ }; ++ ++ /* Select the control pipe for the request transfer */ ++ Pipe_SelectPipe(PIPE_CONTROLPIPE); ++ ++ /* Send control request to retrieve the HID report from the attached device */ ++ if (USB_Host_SendControlRequest(HIDReportData) != HOST_SENDCONTROL_Successful) ++ return ParseControlError; ++ ++ /* Send the HID report to the parser for processing */ ++ if (USB_ProcessHIDReport(HIDReportData, HIDReportSize, &HIDReportInfo) != HID_PARSE_Successful) ++ return ParseError; ++ ++ return ParseSuccessful; ++} ++ ++/** Callback for the HID Report Parser. This function is called each time the HID report parser is about to store ++ * an IN, OUT or FEATURE item into the HIDReportInfo structure. To save on RAM, we are able to filter out items ++ * we aren't interested in (preventing us from being able to extract them later on, but saving on the RAM they would ++ * have occupied). ++ * ++ * \param[in] CurrentItem Pointer to the item the HID report parser is currently working with ++ * ++ * \return Boolean \c true if the item should be stored into the HID report structure, \c false if it should be discarded ++ */ ++bool CALLBACK_HIDParser_FilterHIDReportItem(HID_ReportItem_t* const CurrentItem) ++{ ++ bool IsJoystick = false; ++ ++ /* Iterate through the item's collection path, until either the root collection node or a collection with the ++ * Joystick Usage is found - this prevents Mice, which use identical descriptors except for the Mouse usage ++ * parent node, from being erroneously treated as a joystick ++ */ ++ for (HID_CollectionPath_t* CurrPath = CurrentItem->CollectionPath; CurrPath != NULL; CurrPath = CurrPath->Parent) ++ { ++ if ((CurrPath->Usage.Page == USAGE_PAGE_GENERIC_DCTRL) && ++ (CurrPath->Usage.Usage == USAGE_JOYSTICK)) ++ { ++ IsJoystick = true; ++ break; ++ } ++ } ++ ++ /* If a collection with the joystick usage was not found, indicate that we are not interested in this item */ ++ if (!IsJoystick) ++ return false; ++ ++ /* Check the attributes of the current joystick item - see if we are interested in it or not; ++ * only store BUTTON and GENERIC_DESKTOP_CONTROL items into the Processed HID Report ++ * structure to save RAM and ignore the rest ++ */ ++ return ((CurrentItem->Attributes.Usage.Page == USAGE_PAGE_BUTTON) || ++ (CurrentItem->Attributes.Usage.Page == USAGE_PAGE_GENERIC_DCTRL)); ++} ++ diff --cc lib/lufa/Demos/Host/LowLevel/JoystickHostWithParser/HIDReport.h index 000000000,000000000..63e6b6ceb new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/JoystickHostWithParser/HIDReport.h @@@ -1,0 -1,0 +1,79 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 HIDReport.c. ++ */ ++ ++#ifndef _HID_REPORT_H_ ++#define _HID_REPORT_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include "JoystickHostWithParser.h" ++ ++ /* Macros: */ ++ /** HID Report Descriptor Usage Page value for a toggle button. */ ++ #define USAGE_PAGE_BUTTON 0x09 ++ ++ /** HID Report Descriptor Usage Page value for a Generic Desktop Control. */ ++ #define USAGE_PAGE_GENERIC_DCTRL 0x01 ++ ++ /** HID Report Descriptor Usage for a Joystick. */ ++ #define USAGE_JOYSTICK 0x04 ++ ++ /** HID Report Descriptor Usage value for a X axis movement. */ ++ #define USAGE_X 0x30 ++ ++ /** HID Report Descriptor Usage value for a Y axis movement. */ ++ #define USAGE_Y 0x31 ++ ++ /* Enums: */ ++ /** Enum for the possible return codes of the \ref GetHIDReportData() function. */ ++ enum JoystickHostWithParser_GetHIDReportDataCodes_t ++ { ++ ParseSuccessful = 0, /**< HID report descriptor parsed successfully */ ++ ParseError = 1, /**< Failed to fully process the HID report descriptor */ ++ ParseControlError = 2, /**< Control error occurred while trying to read the device HID descriptor */ ++ }; ++ ++ /* External Variables: */ ++ extern uint16_t HIDReportSize; ++ extern HID_ReportInfo_t HIDReportInfo; ++ ++ /* Function Prototypes: */ ++ uint8_t GetHIDReportData(void); ++ ++ bool CALLBACK_HIDParser_FilterHIDReportItem(HID_ReportItem_t* const CurrentItem); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/LowLevel/JoystickHostWithParser/JoystickHostWithParser.c index 000000000,000000000..a903c5767 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/JoystickHostWithParser/JoystickHostWithParser.c @@@ -1,0 -1,0 +1,273 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 JoystickHostWithParser demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "JoystickHostWithParser.h" ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ puts_P(PSTR(ESC_FG_CYAN "Joystick HID Parser Host Demo running.\r\n" ESC_FG_WHITE)); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ JoystickHost_Task(); ++ ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#endif ++ ++ /* Hardware Initialization */ ++ Serial_Init(9600, false); ++ LEDs_Init(); ++ USB_Init(); ++ ++ /* Create a stdio stream for the serial port for stdin and stdout */ ++ Serial_CreateStream(NULL); ++} ++ ++/** Event handler for the USB_DeviceAttached event. This indicates that a device has been attached to the host, and ++ * starts the library USB task to begin the enumeration and USB management process. ++ */ ++void EVENT_USB_Host_DeviceAttached(void) ++{ ++ puts_P(PSTR(ESC_FG_GREEN "Device Attached.\r\n" ESC_FG_WHITE)); ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the USB_DeviceUnattached event. This indicates that a device has been removed from the host, and ++ * stops the library USB task management process. ++ */ ++void EVENT_USB_Host_DeviceUnattached(void) ++{ ++ puts_P(PSTR(ESC_FG_GREEN "Device Unattached.\r\n" ESC_FG_WHITE)); ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_DeviceEnumerationComplete event. This indicates that a device has been successfully ++ * enumerated by the host and is now ready to be used by the application. ++ */ ++void EVENT_USB_Host_DeviceEnumerationComplete(void) ++{ ++ puts_P(PSTR("Getting Config Data.\r\n")); ++ ++ uint8_t ErrorCode; ++ ++ /* Get and process the configuration descriptor data */ ++ if ((ErrorCode = ProcessConfigurationDescriptor()) != SuccessfulConfigRead) ++ { ++ if (ErrorCode == ControlError) ++ puts_P(PSTR(ESC_FG_RED "Control Error (Get Configuration).\r\n")); ++ else ++ puts_P(PSTR(ESC_FG_RED "Invalid Device.\r\n")); ++ ++ printf_P(PSTR(" -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ /* Set the device configuration to the first configuration (rarely do devices use multiple configurations) */ ++ if ((ErrorCode = USB_Host_SetDeviceConfiguration(1)) != HOST_SENDCONTROL_Successful) ++ { ++ printf_P(PSTR(ESC_FG_RED "Control Error (Set Configuration).\r\n" ++ " -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ printf_P(PSTR("Processing HID Report (Size %d Bytes).\r\n"), HIDReportSize); ++ ++ /* Get and process the device's first HID report descriptor */ ++ if ((ErrorCode = GetHIDReportData()) != ParseSuccessful) ++ { ++ puts_P(PSTR(ESC_FG_RED "Report Parse Error.\r\n")); ++ ++ if (!(HIDReportInfo.TotalReportItems)) ++ puts_P(PSTR("Not a valid Joystick." ESC_FG_WHITE)); ++ else ++ printf_P(PSTR(" -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ puts_P(PSTR("Joystick Enumerated.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++} ++ ++/** Event handler for the USB_HostError event. This indicates that a hardware error occurred while in host mode. */ ++void EVENT_USB_Host_HostError(const uint8_t ErrorCode) ++{ ++ USB_Disable(); ++ ++ printf_P(PSTR(ESC_FG_RED "Host Mode Error\r\n" ++ " -- Error Code %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ for(;;); ++} ++ ++/** Event handler for the USB_DeviceEnumerationFailed event. This indicates that a problem occurred while ++ * enumerating an attached USB device. ++ */ ++void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, const uint8_t SubErrorCode) ++{ ++ printf_P(PSTR(ESC_FG_RED "Dev Enum Error\r\n" ++ " -- Error Code %d\r\n" ++ " -- Sub Error Code %d\r\n" ++ " -- In State %d\r\n" ESC_FG_WHITE), ErrorCode, SubErrorCode, USB_HostState); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++} ++ ++/** Task to read and process the HID report descriptor and HID reports from the device ++ * and display the results onto the board LEDs. ++ */ ++void JoystickHost_Task(void) ++{ ++ if (USB_HostState != HOST_STATE_Configured) ++ return; ++ ++ /* Select and unfreeze joystick data pipe */ ++ Pipe_SelectPipe(JOYSTICK_DATA_IN_PIPE); ++ Pipe_Unfreeze(); ++ ++ /* Check to see if a packet has been received */ ++ if (Pipe_IsINReceived()) ++ { ++ /* Check if data has been received from the attached joystick */ ++ if (Pipe_IsReadWriteAllowed()) ++ { ++ /* Create buffer big enough for the report */ ++ uint8_t JoystickReport[Pipe_BytesInPipe()]; ++ ++ /* Load in the joystick report */ ++ Pipe_Read_Stream_LE(JoystickReport, Pipe_BytesInPipe(), NULL); ++ ++ /* Process the read in joystick report from the device */ ++ ProcessJoystickReport(JoystickReport); ++ } ++ ++ /* Clear the IN endpoint, ready for next data packet */ ++ Pipe_ClearIN(); ++ } ++ ++ /* Freeze joystick data pipe */ ++ Pipe_Freeze(); ++} ++ ++/** Processes a read HID report from an attached joystick, extracting out elements via the HID parser results ++ * as required and displays movement and button presses on the board LEDs. ++ * ++ * \param[in] JoystickReport Pointer to a HID report from an attached joystick device ++ */ ++void ProcessJoystickReport(uint8_t* JoystickReport) ++{ ++ uint8_t LEDMask = LEDS_NO_LEDS; ++ ++ /* Check each HID report item in turn, looking for joystick X/Y/button reports */ ++ for (uint8_t ReportNumber = 0; ReportNumber < HIDReportInfo.TotalReportItems; ReportNumber++) ++ { ++ /* Create a temporary item pointer to the next report item */ ++ HID_ReportItem_t* ReportItem = &HIDReportInfo.ReportItems[ReportNumber]; ++ ++ bool FoundData; ++ ++ if ((ReportItem->Attributes.Usage.Page == USAGE_PAGE_BUTTON) && ++ (ReportItem->ItemType == HID_REPORT_ITEM_In)) ++ { ++ /* Get the joystick button value */ ++ FoundData = USB_GetHIDReportItemInfo(JoystickReport, ReportItem); ++ ++ /* For multi-report devices - if the requested data was not in the issued report, continue */ ++ if (!(FoundData)) ++ continue; ++ ++ /* If button is pressed, all LEDs are turned on */ ++ if (ReportItem->Value) ++ LEDMask = LEDS_ALL_LEDS; ++ } ++ else if ((ReportItem->Attributes.Usage.Page == USAGE_PAGE_GENERIC_DCTRL) && ++ ((ReportItem->Attributes.Usage.Usage == USAGE_X) || ++ (ReportItem->Attributes.Usage.Usage == USAGE_Y)) && ++ (ReportItem->ItemType == HID_REPORT_ITEM_In)) ++ { ++ /* Get the joystick relative position value */ ++ FoundData = USB_GetHIDReportItemInfo(JoystickReport, ReportItem); ++ ++ /* For multi-report devices - if the requested data was not in the issued report, continue */ ++ if (!(FoundData)) ++ continue; ++ ++ int16_t DeltaMovement = HID_ALIGN_DATA(ReportItem, int16_t); ++ ++ /* Check to see if a (non-zero) delta movement has been indicated */ ++ if (DeltaMovement) ++ { ++ /* Determine if the report is for the X or Y delta movement, light LEDs as appropriate */ ++ if (ReportItem->Attributes.Usage.Usage == USAGE_X) ++ LEDMask |= ((DeltaMovement > 0) ? LEDS_LED1 : LEDS_LED2); ++ else ++ LEDMask |= ((DeltaMovement > 0) ? LEDS_LED3 : LEDS_LED4); ++ } ++ } ++ } ++ ++ /* Display the button information on the board LEDs */ ++ LEDs_SetAllLEDs(LEDMask); ++} ++ diff --cc lib/lufa/Demos/Host/LowLevel/JoystickHostWithParser/JoystickHostWithParser.h index 000000000,000000000..944664f97 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/JoystickHostWithParser/JoystickHostWithParser.h @@@ -1,0 -1,0 +1,83 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 JoystickHostWithParser.c. ++ */ ++ ++#ifndef _JOYSTICK_HOST_H_ ++#define _JOYSTICK_HOST_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/pgmspace.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <stdio.h> ++ ++ #include <LUFA/Drivers/Misc/TerminalCodes.h> ++ #include <LUFA/Drivers/Peripheral/Serial.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Platform/Platform.h> ++ ++ #include "ConfigDescriptor.h" ++ #include "HIDReport.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 JoystickHost_Task(void); ++ ++ void EVENT_USB_Host_HostError(const uint8_t ErrorCode); ++ void EVENT_USB_Host_DeviceAttached(void); ++ void EVENT_USB_Host_DeviceUnattached(void); ++ void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode); ++ void EVENT_USB_Host_DeviceEnumerationComplete(void); ++ ++ void ProcessJoystickReport(uint8_t* JoystickReport); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/LowLevel/JoystickHostWithParser/JoystickHostWithParser.txt index 000000000,000000000..9eba4ed86 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/JoystickHostWithParser/JoystickHostWithParser.txt @@@ -1,0 -1,0 +1,71 @@@ ++/** \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 Joystick Host With HID Descriptor Parser Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * ++ * \section Sec_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>Host</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Class:</b></td> ++ * <td>Human Interface Device (HID)</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>N/A</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF HID Specification \n ++ * USBIF HID Usage Tables</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Low Speed Mode \n ++ * Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Joystick host demonstration application. This gives a simple reference ++ * application for implementing a USB Joystick host, for USB joysticks using ++ * the standard joystick HID profile. It uses a HID parser for the HID ++ * reports, allowing for correct operation across all USB joysticks. This ++ * demo supports joysticks with a single HID report. ++ * ++ * Joystick movement and button presses are displayed on the board LEDs. ++ * On connection to a USB joystick, the report items will be processed and ++ * printed as a formatted list through the USART before the joystick is ++ * fully enumerated. ++ * ++ * Currently only single interface joysticks are supported. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Host/LowLevel/JoystickHostWithParser/asf.xml index 000000000,000000000..f2b919511 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/JoystickHostWithParser/asf.xml @@@ -1,0 -1,0 +1,52 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Joystick HID (with parser) Host Demo (Low Level APIs)" id="lufa.demos.host.lowlevel.joystick_parser.example.avr8"> ++ <require idref="lufa.demos.host.lowlevel.joystick_parser"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.host.lowlevel.joystick_parser" caption="Joystick HID (with parser) Host Demo (Low Level APIs)"> ++ <info type="description" value="summary"> ++ Joystick HID Host demo with HID parser, implementing a basic USB joystick host that can display movement data on the board LEDs. This demo uses the Low Level LUFA APIs to manually implement a USB Class for demonstration purposes without using the simpler in-built LUFA Class Driver APIs. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Low Level APIs"/> ++ <keyword value="USB Host"/> ++ <keyword value="HID Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="JoystickHostWithParser.txt"/> ++ ++ <build type="c-source" value="JoystickHostWithParser.c"/> ++ <build type="c-source" value="ConfigDescriptor.c"/> ++ <build type="c-source" value="HIDReport.c"/> ++ <build type="header-file" value="JoystickHostWithParser.h"/> ++ <build type="header-file" value="ConfigDescriptor.h"/> ++ <build type="header-file" value="HIDReport.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.peripheral.usart"/> ++ <require idref="lufa.drivers.misc.ansi"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Host/LowLevel/JoystickHostWithParser/doxyfile index 000000000,000000000..e8f82b8fe new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/JoystickHostWithParser/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Joystick Host Demo (Using HID Descriptor Parser)" ++ ++# 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Host/LowLevel/JoystickHostWithParser/makefile index 000000000,000000000..45c20b790 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/JoystickHostWithParser/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = JoystickHostWithParser ++SRC = $(TARGET).c ConfigDescriptor.c HIDReport.c $(LUFA_SRC_USB) $(LUFA_SRC_SERIAL) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Host/LowLevel/KeyboardHost/Config/LUFAConfig.h index 000000000,000000000..197122fce new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/KeyboardHost/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++// #define USB_DEVICE_ONLY ++ #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++// #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++// #define FIXED_CONTROL_ENDPOINT_SIZE {Insert Value Here} ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++// #define FIXED_NUM_CONFIGURATIONS {Insert Value Here} ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Host/LowLevel/KeyboardHost/ConfigDescriptor.c index 000000000,000000000..1c152b740 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/KeyboardHost/ConfigDescriptor.c @@@ -1,0 -1,0 +1,155 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 Configuration Descriptor processing routines, to determine the correct pipe configurations ++ * needed to communication with an attached USB device. Descriptors are special computer-readable structures ++ * which the host requests upon device enumeration, to determine the device's capabilities and functions. ++ */ ++ ++#include "ConfigDescriptor.h" ++ ++/** Reads and processes an attached device's descriptors, to determine compatibility and pipe configurations. This ++ * routine will read in the entire configuration descriptor, and configure the hosts pipes to correctly communicate ++ * with compatible devices. ++ * ++ * This routine searches for a HID interface descriptor containing at least one Interrupt type IN endpoint. ++ * ++ * \return An error code from the \ref KeyboardHost_GetConfigDescriptorDataCodes_t enum. ++ */ ++uint8_t ProcessConfigurationDescriptor(void) ++{ ++ uint8_t ConfigDescriptorData[512]; ++ void* CurrConfigLocation = ConfigDescriptorData; ++ uint16_t CurrConfigBytesRem; ++ ++ USB_Descriptor_Interface_t* HIDInterface = NULL; ++ USB_Descriptor_Endpoint_t* DataINEndpoint = NULL; ++ ++ /* Retrieve the entire configuration descriptor into the allocated buffer */ ++ switch (USB_Host_GetDeviceConfigDescriptor(1, &CurrConfigBytesRem, ConfigDescriptorData, sizeof(ConfigDescriptorData))) ++ { ++ case HOST_GETCONFIG_Successful: ++ break; ++ case HOST_GETCONFIG_InvalidData: ++ return InvalidConfigDataReturned; ++ case HOST_GETCONFIG_BuffOverflow: ++ return DescriptorTooLarge; ++ default: ++ return ControlError; ++ } ++ ++ while (!(DataINEndpoint)) ++ { ++ /* See if we've found a likely compatible interface, and if there is an endpoint within that interface */ ++ if (!(HIDInterface) || ++ USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, ++ DComp_NextKeyboardInterfaceDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found) ++ { ++ /* Get the next HID interface from the configuration descriptor */ ++ if (USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, ++ DComp_NextKeyboardInterface) != DESCRIPTOR_SEARCH_COMP_Found) ++ { ++ /* Descriptor not found, error out */ ++ return NoCompatibleInterfaceFound; ++ } ++ ++ /* Save the interface in case we need to refer back to it later */ ++ HIDInterface = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Interface_t); ++ ++ /* Skip the remainder of the loop as we have not found an endpoint yet */ ++ continue; ++ } ++ ++ /* Retrieve the endpoint address from the endpoint descriptor */ ++ USB_Descriptor_Endpoint_t* EndpointData = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Endpoint_t); ++ ++ /* If the endpoint is a IN type endpoint */ ++ if ((EndpointData->EndpointAddress & ENDPOINT_DIR_MASK) == ENDPOINT_DIR_IN) ++ DataINEndpoint = EndpointData; ++ } ++ ++ /* Configure the HID data IN pipe */ ++ Pipe_ConfigurePipe(KEYBOARD_DATA_IN_PIPE, EP_TYPE_INTERRUPT, DataINEndpoint->EndpointAddress, DataINEndpoint->EndpointSize, 1); ++ Pipe_SetInterruptPeriod(DataINEndpoint->PollingIntervalMS); ++ ++ /* Valid data found, return success */ ++ return SuccessfulConfigRead; ++} ++ ++/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's ++ * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration ++ * descriptor processing if an incompatible descriptor configuration is found. ++ * ++ * This comparator searches for the next Interface descriptor of the correct Keyboard HID Class and Protocol values. ++ * ++ * \return A value from the DSEARCH_Return_ErrorCodes_t enum ++ */ ++uint8_t DComp_NextKeyboardInterface(void* CurrentDescriptor) ++{ ++ USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t); ++ ++ if (Header->Type == DTYPE_Interface) ++ { ++ USB_Descriptor_Interface_t* Interface = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Interface_t); ++ ++ /* Check the HID descriptor class and protocol, break out if correct class/protocol interface found */ ++ if ((Interface->Class == HID_CSCP_HIDClass) && ++ (Interface->Protocol == HID_CSCP_KeyboardBootProtocol)) ++ { ++ return DESCRIPTOR_SEARCH_Found; ++ } ++ } ++ ++ return DESCRIPTOR_SEARCH_NotFound; ++} ++ ++/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's ++ * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration ++ * descriptor processing if an incompatible descriptor configuration is found. ++ * ++ * This comparator searches for the next Endpoint descriptor inside the current interface descriptor, aborting the ++ * search if another interface descriptor is found before the required endpoint. ++ * ++ * \return A value from the DSEARCH_Return_ErrorCodes_t enum ++ */ ++uint8_t DComp_NextKeyboardInterfaceDataEndpoint(void* CurrentDescriptor) ++{ ++ USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t); ++ ++ if (Header->Type == DTYPE_Endpoint) ++ return DESCRIPTOR_SEARCH_Found; ++ else if (Header->Type == DTYPE_Interface) ++ return DESCRIPTOR_SEARCH_Fail; ++ else ++ return DESCRIPTOR_SEARCH_NotFound; ++} ++ diff --cc lib/lufa/Demos/Host/LowLevel/KeyboardHost/ConfigDescriptor.h index 000000000,000000000..e6da558bf new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/KeyboardHost/ConfigDescriptor.h @@@ -1,0 -1,0 +1,66 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ConfigDescriptor.c. ++ */ ++ ++#ifndef _CONFIGDESCRIPTOR_H_ ++#define _CONFIGDESCRIPTOR_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include "KeyboardHost.h" ++ ++ /* Macros: */ ++ /** Pipe address for the keyboard data IN pipe. */ ++ #define KEYBOARD_DATA_IN_PIPE (PIPE_DIR_IN | 1) ++ ++ /* Enums: */ ++ /** Enum for the possible return codes of the \ref ProcessConfigurationDescriptor() function. */ ++ enum KeyboardHost_GetConfigDescriptorDataCodes_t ++ { ++ SuccessfulConfigRead = 0, /**< Configuration Descriptor was processed successfully */ ++ ControlError = 1, /**< A control request to the device failed to complete successfully */ ++ DescriptorTooLarge = 2, /**< The device's Configuration Descriptor is too large to process */ ++ InvalidConfigDataReturned = 3, /**< The device returned an invalid Configuration Descriptor */ ++ NoCompatibleInterfaceFound = 4, /**< A compatible interface with the required endpoints was not found */ ++ }; ++ ++ /* Function Prototypes: */ ++ uint8_t ProcessConfigurationDescriptor(void); ++ ++ uint8_t DComp_NextKeyboardInterface(void* CurrentDescriptor); ++ uint8_t DComp_NextKeyboardInterfaceDataEndpoint(void* CurrentDescriptor); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/LowLevel/KeyboardHost/KeyboardHost.c index 000000000,000000000..df7338339 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/KeyboardHost/KeyboardHost.c @@@ -1,0 -1,0 +1,264 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 KeyboardHost demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "KeyboardHost.h" ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ puts_P(PSTR(ESC_FG_CYAN "Keyboard HID Host Demo running.\r\n" ESC_FG_WHITE)); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ KeyboardHost_Task(); ++ ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#endif ++ ++ /* Hardware Initialization */ ++ Serial_Init(9600, false); ++ LEDs_Init(); ++ USB_Init(); ++ ++ /* Create a stdio stream for the serial port for stdin and stdout */ ++ Serial_CreateStream(NULL); ++} ++ ++/** Event handler for the USB_DeviceAttached event. This indicates that a device has been attached to the host, and ++ * starts the library USB task to begin the enumeration and USB management process. ++ */ ++void EVENT_USB_Host_DeviceAttached(void) ++{ ++ puts_P(PSTR(ESC_FG_GREEN "Device Attached.\r\n" ESC_FG_WHITE)); ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the USB_DeviceUnattached event. This indicates that a device has been removed from the host, and ++ * stops the library USB task management process. ++ */ ++void EVENT_USB_Host_DeviceUnattached(void) ++{ ++ puts_P(PSTR(ESC_FG_GREEN "Device Unattached.\r\n" ESC_FG_WHITE)); ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_DeviceEnumerationComplete event. This indicates that a device has been successfully ++ * enumerated by the host and is now ready to be used by the application. ++ */ ++void EVENT_USB_Host_DeviceEnumerationComplete(void) ++{ ++ puts_P(PSTR("Getting Config Data.\r\n")); ++ ++ uint8_t ErrorCode; ++ ++ /* Get and process the configuration descriptor data */ ++ if ((ErrorCode = ProcessConfigurationDescriptor()) != SuccessfulConfigRead) ++ { ++ if (ErrorCode == ControlError) ++ puts_P(PSTR(ESC_FG_RED "Control Error (Get Configuration).\r\n")); ++ else ++ puts_P(PSTR(ESC_FG_RED "Invalid Device.\r\n")); ++ ++ printf_P(PSTR(" -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ /* Set the device configuration to the first configuration (rarely do devices use multiple configurations) */ ++ if ((ErrorCode = USB_Host_SetDeviceConfiguration(1)) != HOST_SENDCONTROL_Successful) ++ { ++ printf_P(PSTR(ESC_FG_RED "Control Error (Set Configuration).\r\n" ++ " -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ /* HID class request to set the keyboard protocol to the Boot Protocol */ ++ USB_ControlRequest = (USB_Request_Header_t) ++ { ++ .bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE), ++ .bRequest = HID_REQ_SetProtocol, ++ .wValue = 0, ++ .wIndex = 0, ++ .wLength = 0, ++ }; ++ ++ /* Select the control pipe for the request transfer */ ++ Pipe_SelectPipe(PIPE_CONTROLPIPE); ++ ++ /* Send the request, display error and wait for device detach if request fails */ ++ if ((ErrorCode = USB_Host_SendControlRequest(NULL)) != HOST_SENDCONTROL_Successful) ++ { ++ printf_P(PSTR(ESC_FG_RED "Control Error (Set Protocol).\r\n" ++ " -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ puts_P(PSTR("Keyboard Enumerated.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++} ++ ++/** Event handler for the USB_HostError event. This indicates that a hardware error occurred while in host mode. */ ++void EVENT_USB_Host_HostError(const uint8_t ErrorCode) ++{ ++ USB_Disable(); ++ ++ printf_P(PSTR(ESC_FG_RED "Host Mode Error\r\n" ++ " -- Error Code %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ for(;;); ++} ++ ++/** Event handler for the USB_DeviceEnumerationFailed event. This indicates that a problem occurred while ++ * enumerating an attached USB device. ++ */ ++void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode) ++{ ++ printf_P(PSTR(ESC_FG_RED "Dev Enum Error\r\n" ++ " -- Error Code %d\r\n" ++ " -- Sub Error Code %d\r\n" ++ " -- In State %d\r\n" ESC_FG_WHITE), ErrorCode, SubErrorCode, USB_HostState); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++} ++ ++/** Task to read in and processes the next report from the attached device, displaying the report ++ * contents on the board LEDs and via the serial port. ++ */ ++void KeyboardHost_Task(void) ++{ ++ if (USB_HostState != HOST_STATE_Configured) ++ return; ++ ++ /* Select keyboard data pipe */ ++ Pipe_SelectPipe(KEYBOARD_DATA_IN_PIPE); ++ ++ /* Unfreeze keyboard data pipe */ ++ Pipe_Unfreeze(); ++ ++ /* Check to see if a packet has been received */ ++ if (!(Pipe_IsINReceived())) ++ { ++ /* Refreeze HID data IN pipe */ ++ Pipe_Freeze(); ++ ++ return; ++ } ++ ++ /* Ensure pipe contains data before trying to read from it */ ++ if (Pipe_IsReadWriteAllowed()) ++ { ++ USB_KeyboardReport_Data_t KeyboardReport; ++ ++ /* Read in keyboard report data */ ++ Pipe_Read_Stream_LE(&KeyboardReport, sizeof(KeyboardReport), NULL); ++ ++ /* Indicate if the modifier byte is non-zero (special key such as shift is being pressed) */ ++ LEDs_ChangeLEDs(LEDS_LED1, (KeyboardReport.Modifier) ? LEDS_LED1 : 0); ++ ++ uint8_t KeyCode = KeyboardReport.KeyCode[0]; ++ ++ /* Check if a key has been pressed */ ++ if (KeyCode) ++ { ++ /* Toggle status LED to indicate keypress */ ++ LEDs_ToggleLEDs(LEDS_LED2); ++ ++ char PressedKey = 0; ++ ++ /* Retrieve pressed key character if alphanumeric */ ++ if ((KeyCode >= HID_KEYBOARD_SC_A) && (KeyCode <= HID_KEYBOARD_SC_Z)) ++ { ++ PressedKey = (KeyCode - HID_KEYBOARD_SC_A) + 'A'; ++ } ++ else if ((KeyCode >= HID_KEYBOARD_SC_1_AND_EXCLAMATION) & ++ (KeyCode < HID_KEYBOARD_SC_0_AND_CLOSING_PARENTHESIS)) ++ { ++ PressedKey = (KeyCode - HID_KEYBOARD_SC_1_AND_EXCLAMATION) + '1'; ++ } ++ else if (KeyCode == HID_KEYBOARD_SC_0_AND_CLOSING_PARENTHESIS) ++ { ++ PressedKey = '0'; ++ } ++ else if (KeyCode == HID_KEYBOARD_SC_SPACE) ++ { ++ PressedKey = ' '; ++ } ++ else if (KeyCode == HID_KEYBOARD_SC_ENTER) ++ { ++ PressedKey = '\n'; ++ } ++ ++ /* Print the pressed key character out through the serial port if valid */ ++ if (PressedKey) ++ putchar(PressedKey); ++ } ++ } ++ ++ /* Clear the IN endpoint, ready for next data packet */ ++ Pipe_ClearIN(); ++ ++ /* Refreeze keyboard data pipe */ ++ Pipe_Freeze(); ++} ++ diff --cc lib/lufa/Demos/Host/LowLevel/KeyboardHost/KeyboardHost.h index 000000000,000000000..317c06565 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/KeyboardHost/KeyboardHost.h @@@ -1,0 -1,0 +1,80 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 KeyboardHost.c. ++ */ ++ ++#ifndef _KEYBOARD_HOST_H_ ++#define _KEYBOARD_HOST_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/pgmspace.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <stdio.h> ++ ++ #include <LUFA/Drivers/Misc/TerminalCodes.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Drivers/Peripheral/Serial.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Platform/Platform.h> ++ ++ #include "ConfigDescriptor.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 KeyboardHost_Task(void); ++ ++ void EVENT_USB_Host_HostError(const uint8_t ErrorCode); ++ void EVENT_USB_Host_DeviceAttached(void); ++ void EVENT_USB_Host_DeviceUnattached(void); ++ void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode); ++ void EVENT_USB_Host_DeviceEnumerationComplete(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/LowLevel/KeyboardHost/KeyboardHost.txt index 000000000,000000000..206ccc011 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/KeyboardHost/KeyboardHost.txt @@@ -1,0 -1,0 +1,73 @@@ ++/** \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 Keyboard Host Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * ++ * \section Sec_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>Host</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Class:</b></td> ++ * <td>Human Interface Device (HID)</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>N/A</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF HID Specification \n ++ * USBIF HID Usage Tables</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Low Speed Mode \n ++ * Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Keyboard host demonstration application. This gives a simple reference ++ * application for implementing a USB keyboard host, for USB keyboards using ++ * the standard keyboard HID profile. ++ * ++ * Pressed alpha-numeric, enter or space key is transmitted through the serial ++ * USART at serial settings 9600, 8, N, 1. ++ * ++ * This uses a naive method where the keyboard is set to Boot Protocol mode, so ++ * that the report structure is fixed and known. A better implementation ++ * uses the HID report parser for correct report data processing across ++ * all compatible mice with advanced characteristics, as shown in the ++ * KeyboardHostWithParser demo application. ++ * ++ * Currently only single interface keyboards are supported. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Host/LowLevel/KeyboardHost/asf.xml index 000000000,000000000..1256e3540 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/KeyboardHost/asf.xml @@@ -1,0 -1,0 +1,50 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Keyboard HID Host Demo (Low Level APIs)" id="lufa.demos.host.lowlevel.keyboard.example.avr8"> ++ <require idref="lufa.demos.host.lowlevel.keyboard"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.host.lowlevel.keyboard" caption="Keyboard HID Host Demo (Low Level APIs)"> ++ <info type="description" value="summary"> ++ Keyboard HID Host demo, implementing a basic USB keyboard host that can display key press data on the board LEDs. This demo uses the Low Level LUFA APIs to manually implement a USB Class for demonstration purposes without using the simpler in-built LUFA Class Driver APIs. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Low Level APIs"/> ++ <keyword value="USB Host"/> ++ <keyword value="HID Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="KeyboardHost.txt"/> ++ ++ <build type="c-source" value="KeyboardHost.c"/> ++ <build type="c-source" value="ConfigDescriptor.c"/> ++ <build type="header-file" value="KeyboardHost.h"/> ++ <build type="header-file" value="ConfigDescriptor.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.peripheral.usart"/> ++ <require idref="lufa.drivers.misc.ansi"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Host/LowLevel/KeyboardHost/doxyfile index 000000000,000000000..968ab03f1 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/KeyboardHost/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Keyboard Host 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Host/LowLevel/KeyboardHost/makefile index 000000000,000000000..02a3aeb0a new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/KeyboardHost/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = KeyboardHost ++SRC = $(TARGET).c ConfigDescriptor.c $(LUFA_SRC_USB) $(LUFA_SRC_SERIAL) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Host/LowLevel/KeyboardHostWithParser/Config/LUFAConfig.h index 000000000,000000000..197122fce new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/KeyboardHostWithParser/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++// #define USB_DEVICE_ONLY ++ #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++// #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++// #define FIXED_CONTROL_ENDPOINT_SIZE {Insert Value Here} ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++// #define FIXED_NUM_CONFIGURATIONS {Insert Value Here} ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Host/LowLevel/KeyboardHostWithParser/ConfigDescriptor.c index 000000000,000000000..ab6791566 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/KeyboardHostWithParser/ConfigDescriptor.c @@@ -1,0 -1,0 +1,189 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 Configuration Descriptor processing routines, to determine the correct pipe configurations ++ * needed to communication with an attached USB device. Descriptors are special computer-readable structures ++ * which the host requests upon device enumeration, to determine the device's capabilities and functions. ++ */ ++ ++#include "ConfigDescriptor.h" ++ ++/** Reads and processes an attached device's descriptors, to determine compatibility and pipe configurations. This ++ * routine will read in the entire configuration descriptor, and configure the hosts pipes to correctly communicate ++ * with compatible devices. ++ * ++ * This routine searches for a HID interface descriptor containing at least one Interrupt type IN endpoint and HID descriptor. ++ * ++ * \return An error code from the \ref KeyboardHostWithParser_GetConfigDescriptorDataCodes_t enum. ++ */ ++uint8_t ProcessConfigurationDescriptor(void) ++{ ++ uint8_t ConfigDescriptorData[512]; ++ void* CurrConfigLocation = ConfigDescriptorData; ++ uint16_t CurrConfigBytesRem; ++ ++ USB_Descriptor_Interface_t* HIDInterface = NULL; ++ USB_HID_Descriptor_HID_t* HIDDescriptor = NULL; ++ USB_Descriptor_Endpoint_t* DataINEndpoint = NULL; ++ ++ /* Retrieve the entire configuration descriptor into the allocated buffer */ ++ switch (USB_Host_GetDeviceConfigDescriptor(1, &CurrConfigBytesRem, ConfigDescriptorData, sizeof(ConfigDescriptorData))) ++ { ++ case HOST_GETCONFIG_Successful: ++ break; ++ case HOST_GETCONFIG_InvalidData: ++ return InvalidConfigDataReturned; ++ case HOST_GETCONFIG_BuffOverflow: ++ return DescriptorTooLarge; ++ default: ++ return ControlError; ++ } ++ ++ while (!(DataINEndpoint)) ++ { ++ /* See if we've found a likely compatible interface, and if there is an endpoint within that interface */ ++ if (!(HIDInterface) || ++ USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, ++ DComp_NextKeyboardInterfaceDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found) ++ { ++ /* Get the next HID interface from the configuration descriptor */ ++ if (USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, ++ DComp_NextKeyboardInterface) != DESCRIPTOR_SEARCH_COMP_Found) ++ { ++ /* Descriptor not found, error out */ ++ return NoCompatibleInterfaceFound; ++ } ++ ++ /* Save the interface in case we need to refer back to it later */ ++ HIDInterface = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Interface_t); ++ ++ /* Get the HID descriptor from the configuration descriptor */ ++ if (USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, ++ DComp_NextHID) != DESCRIPTOR_SEARCH_COMP_Found) ++ { ++ /* Descriptor not found, error out */ ++ return NoCompatibleInterfaceFound; ++ } ++ ++ /* Save the HID descriptor for later use */ ++ HIDDescriptor = DESCRIPTOR_PCAST(CurrConfigLocation, USB_HID_Descriptor_HID_t); ++ ++ /* Skip the remainder of the loop as we have not found an endpoint yet */ ++ continue; ++ } ++ ++ /* Retrieve the endpoint address from the endpoint descriptor */ ++ USB_Descriptor_Endpoint_t* EndpointData = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Endpoint_t); ++ ++ /* If the endpoint is a IN type endpoint */ ++ if ((EndpointData->EndpointAddress & ENDPOINT_DIR_MASK) == ENDPOINT_DIR_IN) ++ DataINEndpoint = EndpointData; ++ } ++ ++ /* Configure the HID data IN pipe */ ++ Pipe_ConfigurePipe(KEYBOARD_DATA_IN_PIPE, EP_TYPE_INTERRUPT, DataINEndpoint->EndpointAddress, DataINEndpoint->EndpointSize, 1); ++ Pipe_SetInterruptPeriod(DataINEndpoint->PollingIntervalMS); ++ ++ /* Get the HID report size from the HID report descriptor */ ++ HIDReportSize = HIDDescriptor->HIDReportLength; ++ ++ /* Valid data found, return success */ ++ return SuccessfulConfigRead; ++} ++ ++/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's ++ * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration ++ * descriptor processing if an incompatible descriptor configuration is found. ++ * ++ * This comparator searches for the next Interface descriptor of the correct Keyboard HID Class and Protocol values. ++ * ++ * \return A value from the DSEARCH_Return_ErrorCodes_t enum ++ */ ++uint8_t DComp_NextKeyboardInterface(void* CurrentDescriptor) ++{ ++ USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t); ++ ++ if (Header->Type == DTYPE_Interface) ++ { ++ USB_Descriptor_Interface_t* Interface = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Interface_t); ++ ++ /* Check the HID descriptor class, break out if correct class interface found */ ++ if (Interface->Class == HID_CSCP_HIDClass) ++ { ++ return DESCRIPTOR_SEARCH_Found; ++ } ++ } ++ ++ return DESCRIPTOR_SEARCH_NotFound; ++} ++ ++/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's ++ * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration ++ * descriptor processing if an incompatible descriptor configuration is found. ++ * ++ * This comparator searches for the next Endpoint descriptor inside the current interface descriptor, aborting the ++ * search if another interface descriptor is found before the required endpoint. ++ * ++ * \return A value from the DSEARCH_Return_ErrorCodes_t enum ++ */ ++uint8_t DComp_NextKeyboardInterfaceDataEndpoint(void* CurrentDescriptor) ++{ ++ USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t); ++ ++ if (Header->Type == DTYPE_Endpoint) ++ return DESCRIPTOR_SEARCH_Found; ++ else if (Header->Type == DTYPE_Interface) ++ return DESCRIPTOR_SEARCH_Fail; ++ else ++ return DESCRIPTOR_SEARCH_NotFound; ++} ++ ++/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's ++ * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration ++ * descriptor processing if an incompatible descriptor configuration is found. ++ * ++ * This comparator searches for the next HID descriptor within the current HID interface descriptor. ++ * ++ * \return A value from the DSEARCH_Return_ErrorCodes_t enum ++ */ ++uint8_t DComp_NextHID(void* CurrentDescriptor) ++{ ++ USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t); ++ ++ if (Header->Type == HID_DTYPE_HID) ++ return DESCRIPTOR_SEARCH_Found; ++ else if (Header->Type == DTYPE_Interface) ++ return DESCRIPTOR_SEARCH_Fail; ++ else ++ return DESCRIPTOR_SEARCH_NotFound; ++} ++ diff --cc lib/lufa/Demos/Host/LowLevel/KeyboardHostWithParser/ConfigDescriptor.h index 000000000,000000000..4cf111ba5 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/KeyboardHostWithParser/ConfigDescriptor.h @@@ -1,0 -1,0 +1,67 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ConfigDescriptor.c. ++ */ ++ ++#ifndef _CONFIGDESCRIPTOR_H_ ++#define _CONFIGDESCRIPTOR_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include "HIDReport.h" ++ ++ /* Macros: */ ++ /** Pipe address for the keyboard report data IN pipe. */ ++ #define KEYBOARD_DATA_IN_PIPE (PIPE_DIR_IN | 1) ++ ++ /* Enums: */ ++ /** Enum for the possible return codes of the \ref ProcessConfigurationDescriptor() function. */ ++ enum KeyboardHostWithParser_GetConfigDescriptorDataCodes_t ++ { ++ SuccessfulConfigRead = 0, /**< Configuration Descriptor was processed successfully */ ++ ControlError = 1, /**< A control request to the device failed to complete successfully */ ++ DescriptorTooLarge = 2, /**< The device's Configuration Descriptor is too large to process */ ++ InvalidConfigDataReturned = 3, /**< The device returned an invalid Configuration Descriptor */ ++ NoCompatibleInterfaceFound = 4, /**< A compatible interface with the required endpoints was not found */ ++ }; ++ ++ /* Function Prototypes: */ ++ uint8_t ProcessConfigurationDescriptor(void); ++ ++ uint8_t DComp_NextKeyboardInterface(void* CurrentDescriptor); ++ uint8_t DComp_NextKeyboardInterfaceDataEndpoint(void* CurrentDescriptor); ++ uint8_t DComp_NextHID(void* CurrentDescriptor); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/LowLevel/KeyboardHostWithParser/HIDReport.c index 000000000,000000000..95ef8b476 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/KeyboardHostWithParser/HIDReport.c @@@ -1,0 -1,0 +1,90 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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. ++*/ ++ ++#include "HIDReport.h" ++ ++/** Size in bytes of the attached device's HID report descriptor */ ++uint16_t HIDReportSize; ++ ++/** Processed HID report descriptor items structure, containing information on each HID report element */ ++HID_ReportInfo_t HIDReportInfo; ++ ++ ++/** Function to read in the HID report descriptor from the attached device, and process it into easy-to-read ++ * structures via the HID parser routines in the LUFA library. ++ * ++ * \return A value from the \ref KeyboardHostWithParser_GetHIDReportDataCodes_t enum ++ */ ++uint8_t GetHIDReportData(void) ++{ ++ /* Create a buffer big enough to hold the entire returned HID report */ ++ uint8_t HIDReportData[HIDReportSize]; ++ ++ USB_ControlRequest = (USB_Request_Header_t) ++ { ++ .bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_INTERFACE), ++ .bRequest = REQ_GetDescriptor, ++ .wValue = (HID_DTYPE_Report << 8), ++ .wIndex = 0, ++ .wLength = HIDReportSize, ++ }; ++ ++ /* Select the control pipe for the request transfer */ ++ Pipe_SelectPipe(PIPE_CONTROLPIPE); ++ ++ /* Send control request to retrieve the HID report from the attached device */ ++ if (USB_Host_SendControlRequest(HIDReportData) != HOST_SENDCONTROL_Successful) ++ return ParseControlError; ++ ++ /* Send the HID report to the parser for processing */ ++ if (USB_ProcessHIDReport(HIDReportData, HIDReportSize, &HIDReportInfo) != HID_PARSE_Successful) ++ return ParseError; ++ ++ return ParseSuccessful; ++} ++ ++/** Callback for the HID Report Parser. This function is called each time the HID report parser is about to store ++ * an IN, OUT or FEATURE item into the HIDReportInfo structure. To save on RAM, we are able to filter out items ++ * we aren't interested in (preventing us from being able to extract them later on, but saving on the RAM they would ++ * have occupied). ++ * ++ * \param[in] CurrentItem Pointer to the item the HID report parser is currently working with ++ * ++ * \return Boolean \c true if the item should be stored into the HID report structure, \c false if it should be discarded ++ */ ++bool CALLBACK_HIDParser_FilterHIDReportItem(HID_ReportItem_t* const CurrentItem) ++{ ++ /* Check the attributes of the current item - see if we are interested in it or not; ++ * only store KEYBOARD usage page items into the Processed HID Report structure to ++ * save RAM and ignore the rest ++ */ ++ return (CurrentItem->Attributes.Usage.Page == USAGE_PAGE_KEYBOARD); ++} ++ diff --cc lib/lufa/Demos/Host/LowLevel/KeyboardHostWithParser/HIDReport.h index 000000000,000000000..3ad3109c2 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/KeyboardHostWithParser/HIDReport.h @@@ -1,0 -1,0 +1,67 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 HIDReport.c. ++ */ ++ ++#ifndef _HID_REPORT_H_ ++#define _HID_REPORT_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include "KeyboardHostWithParser.h" ++ ++ /* Macros: */ ++ /** HID Report Descriptor Usage Page value for a desktop keyboard. */ ++ #define USAGE_PAGE_KEYBOARD 0x07 ++ ++ /* Enums: */ ++ /** Enum for the possible return codes of the \ref GetHIDReportData() function. */ ++ enum KeyboardHostWithParser_GetHIDReportDataCodes_t ++ { ++ ParseSuccessful = 0, /**< HID report descriptor parsed successfully */ ++ ParseError = 1, /**< Failed to fully process the HID report descriptor */ ++ ParseControlError = 2, /**< Control error occurred while trying to read the device HID descriptor */ ++ }; ++ ++ /* External Variables: */ ++ extern uint16_t HIDReportSize; ++ extern HID_ReportInfo_t HIDReportInfo; ++ ++ /* Function Prototypes: */ ++ uint8_t GetHIDReportData(void); ++ ++ bool CALLBACK_HIDParser_FilterHIDReportItem(HID_ReportItem_t* const CurrentItem); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/LowLevel/KeyboardHostWithParser/KeyboardHostWithParser.c index 000000000,000000000..e645cee03 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/KeyboardHostWithParser/KeyboardHostWithParser.c @@@ -1,0 -1,0 +1,285 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 KeyboardHostWithParser demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "KeyboardHostWithParser.h" ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ puts_P(PSTR(ESC_FG_CYAN "Keyboard HID Parser Host Demo running.\r\n" ESC_FG_WHITE)); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ KeyboardHost_Task(); ++ ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#endif ++ ++ /* Hardware Initialization */ ++ Serial_Init(9600, false); ++ LEDs_Init(); ++ USB_Init(); ++ ++ /* Create a stdio stream for the serial port for stdin and stdout */ ++ Serial_CreateStream(NULL); ++} ++ ++/** Event handler for the USB_DeviceAttached event. This indicates that a device has been attached to the host, and ++ * starts the library USB task to begin the enumeration and USB management process. ++ */ ++void EVENT_USB_Host_DeviceAttached(void) ++{ ++ puts_P(PSTR(ESC_FG_GREEN "Device Attached.\r\n" ESC_FG_WHITE)); ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the USB_DeviceUnattached event. This indicates that a device has been removed from the host, and ++ * stops the library USB task management process. ++ */ ++void EVENT_USB_Host_DeviceUnattached(void) ++{ ++ puts_P(PSTR(ESC_FG_GREEN "\r\nDevice Unattached.\r\n" ESC_FG_WHITE)); ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_DeviceEnumerationComplete event. This indicates that a device has been successfully ++ * enumerated by the host and is now ready to be used by the application. ++ */ ++void EVENT_USB_Host_DeviceEnumerationComplete(void) ++{ ++ puts_P(PSTR("Getting Config Data.\r\n")); ++ ++ uint8_t ErrorCode; ++ ++ /* Get and process the configuration descriptor data */ ++ if ((ErrorCode = ProcessConfigurationDescriptor()) != SuccessfulConfigRead) ++ { ++ if (ErrorCode == ControlError) ++ puts_P(PSTR(ESC_FG_RED "Control Error (Get Configuration).\r\n")); ++ else ++ puts_P(PSTR(ESC_FG_RED "Invalid Device.\r\n")); ++ ++ printf_P(PSTR(" -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ /* Set the device configuration to the first configuration (rarely do devices use multiple configurations) */ ++ if ((ErrorCode = USB_Host_SetDeviceConfiguration(1)) != HOST_SENDCONTROL_Successful) ++ ++ { ++ puts_P(PSTR(ESC_FG_RED "Control Error (Set Configuration).\r\n")); ++ printf_P(PSTR(" -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ printf_P(PSTR("Processing HID Report (Size %d Bytes).\r\n"), HIDReportSize); ++ ++ /* Get and process the device's first HID report descriptor */ ++ if ((ErrorCode = GetHIDReportData()) != ParseSuccessful) ++ { ++ puts_P(PSTR(ESC_FG_RED "Report Parse Error.\r\n")); ++ ++ if (!(HIDReportInfo.TotalReportItems)) ++ puts_P(PSTR("Not a valid Keyboard." ESC_FG_WHITE)); ++ else ++ printf_P(PSTR(" -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ puts_P(PSTR("Keyboard Enumerated.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++} ++ ++/** Event handler for the USB_HostError event. This indicates that a hardware error occurred while in host mode. */ ++void EVENT_USB_Host_HostError(const uint8_t ErrorCode) ++{ ++ USB_Disable(); ++ ++ printf_P(PSTR(ESC_FG_RED "Host Mode Error\r\n" ++ " -- Error Code %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ for(;;); ++} ++ ++/** Event handler for the USB_DeviceEnumerationFailed event. This indicates that a problem occurred while ++ * enumerating an attached USB device. ++ */ ++void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode) ++{ ++ printf_P(PSTR(ESC_FG_RED "Dev Enum Error\r\n" ++ " -- Error Code %d\r\n" ++ " -- Sub Error Code %d\r\n" ++ " -- In State %d\r\n" ESC_FG_WHITE), ErrorCode, SubErrorCode, USB_HostState); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++} ++ ++/** Task to read in and processes the next report from the attached device, displaying the report ++ * contents on the board LEDs and via the serial port. ++ */ ++void KeyboardHost_Task(void) ++{ ++ if (USB_HostState != HOST_STATE_Configured) ++ return; ++ ++ /* Select and unfreeze keyboard data pipe */ ++ Pipe_SelectPipe(KEYBOARD_DATA_IN_PIPE); ++ Pipe_Unfreeze(); ++ ++ /* Check to see if a packet has been received */ ++ if (Pipe_IsINReceived()) ++ { ++ /* Check if data has been received from the attached keyboard */ ++ if (Pipe_IsReadWriteAllowed()) ++ { ++ /* Create buffer big enough for the report */ ++ uint8_t KeyboardReport[Pipe_BytesInPipe()]; ++ ++ /* Load in the keyboard report */ ++ Pipe_Read_Stream_LE(KeyboardReport, Pipe_BytesInPipe(), NULL); ++ ++ /* Process the read in keyboard report from the device */ ++ ProcessKeyboardReport(KeyboardReport); ++ } ++ ++ /* Clear the IN endpoint, ready for next data packet */ ++ Pipe_ClearIN(); ++ } ++ ++ /* Freeze keyboard data pipe */ ++ Pipe_Freeze(); ++} ++ ++/** Processes a read HID report from an attached keyboard, extracting out elements via the HID parser results ++ * as required and prints pressed characters to the serial port. Each time a key is typed, a board LED is toggled. ++ * ++ * \param[in] KeyboardReport Pointer to a HID report from an attached keyboard device ++ */ ++void ProcessKeyboardReport(uint8_t* KeyboardReport) ++{ ++ /* Check each HID report item in turn, looking for keyboard scan code reports */ ++ for (uint8_t ReportNumber = 0; ReportNumber < HIDReportInfo.TotalReportItems; ReportNumber++) ++ { ++ /* Create a temporary item pointer to the next report item */ ++ HID_ReportItem_t* ReportItem = &HIDReportInfo.ReportItems[ReportNumber]; ++ ++ /* Check if the current report item is a keyboard scan-code */ ++ if ((ReportItem->Attributes.Usage.Page == USAGE_PAGE_KEYBOARD) && ++ (ReportItem->Attributes.BitSize == 8) && ++ (ReportItem->Attributes.Logical.Maximum > 1) && ++ (ReportItem->ItemType == HID_REPORT_ITEM_In)) ++ { ++ /* Retrieve the keyboard scan-code from the report data retrieved from the device */ ++ bool FoundData = USB_GetHIDReportItemInfo(KeyboardReport, ReportItem); ++ ++ /* For multi-report devices - if the requested data was not in the issued report, continue */ ++ if (!(FoundData)) ++ continue; ++ ++ /* Key code is an unsigned char in length, cast to the appropriate type */ ++ uint8_t KeyCode = (uint8_t)ReportItem->Value; ++ ++ /* If scan-code is non-zero, a key is being pressed */ ++ if (KeyCode) ++ { ++ /* Toggle status LED to indicate keypress */ ++ LEDs_ToggleLEDs(LEDS_LED2); ++ ++ char PressedKey = 0; ++ ++ /* Retrieve pressed key character if alphanumeric */ ++ if ((KeyCode >= HID_KEYBOARD_SC_A) && (KeyCode <= HID_KEYBOARD_SC_Z)) ++ { ++ PressedKey = (KeyCode - HID_KEYBOARD_SC_A) + 'A'; ++ } ++ else if ((KeyCode >= HID_KEYBOARD_SC_1_AND_EXCLAMATION) & ++ (KeyCode < HID_KEYBOARD_SC_0_AND_CLOSING_PARENTHESIS)) ++ { ++ PressedKey = (KeyCode - HID_KEYBOARD_SC_1_AND_EXCLAMATION) + '1'; ++ } ++ else if (KeyCode == HID_KEYBOARD_SC_0_AND_CLOSING_PARENTHESIS) ++ { ++ PressedKey = '0'; ++ } ++ else if (KeyCode == HID_KEYBOARD_SC_SPACE) ++ { ++ PressedKey = ' '; ++ } ++ else if (KeyCode == HID_KEYBOARD_SC_ENTER) ++ { ++ PressedKey = '\n'; ++ } ++ ++ /* Print the pressed key character out through the serial port if valid */ ++ if (PressedKey) ++ putchar(PressedKey); ++ } ++ ++ /* Once a scan-code is found, stop scanning through the report items */ ++ break; ++ } ++ } ++} ++ diff --cc lib/lufa/Demos/Host/LowLevel/KeyboardHostWithParser/KeyboardHostWithParser.h index 000000000,000000000..ce29a8491 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/KeyboardHostWithParser/KeyboardHostWithParser.h @@@ -1,0 -1,0 +1,78 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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. ++*/ ++ ++#ifndef _KEYBOARD_HOST_H_ ++#define _KEYBOARD_HOST_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/pgmspace.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <stdio.h> ++ ++ #include <LUFA/Drivers/Misc/TerminalCodes.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Drivers/Peripheral/Serial.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Platform/Platform.h> ++ ++ #include "ConfigDescriptor.h" ++ #include "HIDReport.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 KeyboardHost_Task(void); ++ ++ void EVENT_USB_Host_HostError(const uint8_t ErrorCode); ++ void EVENT_USB_Host_DeviceAttached(void); ++ void EVENT_USB_Host_DeviceUnattached(void); ++ void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode); ++ void EVENT_USB_Host_DeviceEnumerationComplete(void); ++ ++ void ProcessKeyboardReport(uint8_t* KeyboardReport); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/LowLevel/KeyboardHostWithParser/KeyboardHostWithParser.txt index 000000000,000000000..4c87965ca new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/KeyboardHostWithParser/KeyboardHostWithParser.txt @@@ -1,0 -1,0 +1,71 @@@ ++/** \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 Keyboard Host With HID Descriptor Parser Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * ++ * \section Sec_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>Host</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Class:</b></td> ++ * <td>Human Interface Device (HID)</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>N/A</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF HID Specification \n ++ * USBIF HID Usage Tables</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Low Speed Mode \n ++ * Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Keyboard host demonstration application. This gives a simple reference ++ * application for implementing a USB Keyboard host, for USB keyboards using ++ * the standard Keyboard HID profile. It uses a HID parser for the HID reports, ++ * allowing for correct operation across all USB keyboards. This demo supports ++ * keyboards with a single HID report. ++ * ++ * Pressed alpha-numeric, enter or space key is transmitted through the serial ++ * USART at serial settings 9600, 8, N, 1. On connection to a USB keyboard, the ++ * report items will be processed and printed as a formatted list through the ++ * USART before the keyboard is fully enumerated. ++ * ++ * Currently only single interface keyboards are supported. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Host/LowLevel/KeyboardHostWithParser/asf.xml index 000000000,000000000..beeaff9b7 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/KeyboardHostWithParser/asf.xml @@@ -1,0 -1,0 +1,52 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Keyboard HID (with parser) Host Demo (Low Level APIs)" id="lufa.demos.host.lowlevel.keyboard_parser.example.avr8"> ++ <require idref="lufa.demos.host.lowlevel.keyboard_parser"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.host.lowlevel.keyboard_parser" caption="Keyboard HID (with parser) Host Demo (Low Level APIs)"> ++ <info type="description" value="summary"> ++ Keyboard HID Host demo with HID parser, implementing a basic USB keyboard host that can display key press data on the board LEDs. This demo uses the Low Level LUFA APIs to manually implement a USB Class for demonstration purposes without using the simpler in-built LUFA Class Driver APIs. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Low Level APIs"/> ++ <keyword value="USB Host"/> ++ <keyword value="HID Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="KeyboardHostWithParser.txt"/> ++ ++ <build type="c-source" value="KeyboardHostWithParser.c"/> ++ <build type="c-source" value="ConfigDescriptor.c"/> ++ <build type="c-source" value="HIDReport.c"/> ++ <build type="header-file" value="KeyboardHostWithParser.h"/> ++ <build type="header-file" value="ConfigDescriptor.h"/> ++ <build type="header-file" value="HIDReport.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.peripheral.usart"/> ++ <require idref="lufa.drivers.misc.ansi"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Host/LowLevel/KeyboardHostWithParser/doxyfile index 000000000,000000000..084a65242 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/KeyboardHostWithParser/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Keyboard Host Demo (Using HID Descriptor Parser)" ++ ++# 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Host/LowLevel/KeyboardHostWithParser/makefile index 000000000,000000000..f5910ea5d new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/KeyboardHostWithParser/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = KeyboardHostWithParser ++SRC = $(TARGET).c ConfigDescriptor.c HIDReport.c $(LUFA_SRC_USB) $(LUFA_SRC_SERIAL) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Host/LowLevel/MIDIHost/Config/LUFAConfig.h index 000000000,000000000..197122fce new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MIDIHost/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++// #define USB_DEVICE_ONLY ++ #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++// #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++// #define FIXED_CONTROL_ENDPOINT_SIZE {Insert Value Here} ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++// #define FIXED_NUM_CONFIGURATIONS {Insert Value Here} ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Host/LowLevel/MIDIHost/ConfigDescriptor.c index 000000000,000000000..c02ec555c new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MIDIHost/ConfigDescriptor.c @@@ -1,0 -1,0 +1,173 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 Configuration Descriptor processing routines, to determine the correct pipe configurations ++ * needed to communication with an attached USB device. Descriptors are special computer-readable structures ++ * which the host requests upon device enumeration, to determine the device's capabilities and functions. ++ */ ++ ++#include "ConfigDescriptor.h" ++ ++/** Reads and processes an attached device's descriptors, to determine compatibility and pipe configurations. This ++ * routine will read in the entire configuration descriptor, and configure the hosts pipes to correctly communicate ++ * with compatible devices. ++ * ++ * This routine searches for a MIDI interface descriptor pair containing bulk data IN and OUT endpoints. ++ * ++ * \return An error code from the \ref MIDIHost_GetConfigDescriptorDataCodes_t enum. ++ */ ++uint8_t ProcessConfigurationDescriptor(void) ++{ ++ uint8_t ConfigDescriptorData[512]; ++ void* CurrConfigLocation = ConfigDescriptorData; ++ uint16_t CurrConfigBytesRem; ++ ++ USB_Descriptor_Interface_t* MIDIInterface = NULL; ++ USB_Descriptor_Endpoint_t* DataINEndpoint = NULL; ++ USB_Descriptor_Endpoint_t* DataOUTEndpoint = NULL; ++ ++ /* Retrieve the entire configuration descriptor into the allocated buffer */ ++ switch (USB_Host_GetDeviceConfigDescriptor(1, &CurrConfigBytesRem, ConfigDescriptorData, sizeof(ConfigDescriptorData))) ++ { ++ case HOST_GETCONFIG_Successful: ++ break; ++ case HOST_GETCONFIG_InvalidData: ++ return InvalidConfigDataReturned; ++ case HOST_GETCONFIG_BuffOverflow: ++ return DescriptorTooLarge; ++ default: ++ return ControlError; ++ } ++ ++ while (!(DataINEndpoint) || !(DataOUTEndpoint)) ++ { ++ /* See if we've found a likely compatible interface, and if there is an endpoint within that interface */ ++ if (!(MIDIInterface) || ++ USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, ++ DComp_NextMIDIStreamingDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found) ++ { ++ /* Get the next Mass Storage interface from the configuration descriptor */ ++ if (USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, ++ DComp_NextMIDIStreamingInterface) != DESCRIPTOR_SEARCH_COMP_Found) ++ { ++ /* Descriptor not found, error out */ ++ return NoCompatibleInterfaceFound; ++ } ++ ++ /* Save the interface in case we need to refer back to it later */ ++ MIDIInterface = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Interface_t); ++ ++ /* Clear any found endpoints */ ++ DataINEndpoint = NULL; ++ DataOUTEndpoint = NULL; ++ ++ /* Skip the remainder of the loop as we have not found an endpoint yet */ ++ continue; ++ } ++ ++ /* Retrieve the endpoint address from the endpoint descriptor */ ++ USB_Descriptor_Endpoint_t* EndpointData = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Endpoint_t); ++ ++ /* If the endpoint is a IN type endpoint */ ++ if ((EndpointData->EndpointAddress & ENDPOINT_DIR_MASK) == ENDPOINT_DIR_IN) ++ DataINEndpoint = EndpointData; ++ else ++ DataOUTEndpoint = EndpointData; ++ } ++ ++ /* Configure the MIDI data IN pipe */ ++ Pipe_ConfigurePipe(MIDI_DATA_IN_PIPE, EP_TYPE_BULK, DataINEndpoint->EndpointAddress, DataINEndpoint->EndpointSize, 1); ++ ++ /* Configure the MIDI data OUT pipe */ ++ Pipe_ConfigurePipe(MIDI_DATA_OUT_PIPE, EP_TYPE_BULK, DataOUTEndpoint->EndpointAddress, DataOUTEndpoint->EndpointSize, 1); ++ ++ /* Valid data found, return success */ ++ return SuccessfulConfigRead; ++} ++ ++/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's ++ * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration ++ * descriptor processing if an incompatible descriptor configuration is found. ++ * ++ * This comparator searches for the next Interface descriptor of the correct MIDI Streaming Class, Subclass and Protocol values. ++ * ++ * \return A value from the DSEARCH_Return_ErrorCodes_t enum ++ */ ++uint8_t DComp_NextMIDIStreamingInterface(void* CurrentDescriptor) ++{ ++ USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t); ++ ++ if (Header->Type == DTYPE_Interface) ++ { ++ USB_Descriptor_Interface_t* Interface = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Interface_t); ++ ++ /* Check the MIDI descriptor class, subclass and protocol, break out if correct data interface found */ ++ if ((Interface->Class == AUDIO_CSCP_AudioClass) && ++ (Interface->SubClass == AUDIO_CSCP_MIDIStreamingSubclass) && ++ (Interface->Protocol == AUDIO_CSCP_StreamingProtocol)) ++ { ++ return DESCRIPTOR_SEARCH_Found; ++ } ++ } ++ ++ return DESCRIPTOR_SEARCH_NotFound; ++} ++ ++/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's ++ * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration ++ * descriptor processing if an incompatible descriptor configuration is found. ++ * ++ * This comparator searches for the next bulk IN or OUT endpoint within the current interface, aborting the search if ++ * another interface descriptor is found before the required endpoint. ++ * ++ * \return A value from the DSEARCH_Return_ErrorCodes_t enum ++ */ ++uint8_t DComp_NextMIDIStreamingDataEndpoint(void* CurrentDescriptor) ++{ ++ USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t); ++ ++ if (Header->Type == DTYPE_Endpoint) ++ { ++ USB_Descriptor_Endpoint_t* Endpoint = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Endpoint_t); ++ ++ /* Check the endpoint type, break out if correct BULK type endpoint found */ ++ if ((Endpoint->Attributes & EP_TYPE_MASK) == EP_TYPE_BULK) ++ return DESCRIPTOR_SEARCH_Found; ++ } ++ else if (Header->Type == DTYPE_Interface) ++ { ++ return DESCRIPTOR_SEARCH_Fail; ++ } ++ ++ return DESCRIPTOR_SEARCH_NotFound; ++} ++ diff --cc lib/lufa/Demos/Host/LowLevel/MIDIHost/ConfigDescriptor.h index 000000000,000000000..7cceba059 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MIDIHost/ConfigDescriptor.h @@@ -1,0 -1,0 +1,69 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ConfigDescriptor.c. ++ */ ++ ++#ifndef _CONFIGDESCRIPTOR_H_ ++#define _CONFIGDESCRIPTOR_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include "MIDIHost.h" ++ ++ /* Macros: */ ++ /** Pipe address for the MIDI data IN pipe. */ ++ #define MIDI_DATA_IN_PIPE (PIPE_DIR_IN | 1) ++ ++ /** Pipe address for the MIDI data OUT pipe. */ ++ #define MIDI_DATA_OUT_PIPE (PIPE_DIR_OUT | 2) ++ ++ /* Enums: */ ++ /** Enum for the possible return codes of the \ref ProcessConfigurationDescriptor() function. */ ++ enum MIDIHost_GetConfigDescriptorDataCodes_t ++ { ++ SuccessfulConfigRead = 0, /**< Configuration Descriptor was processed successfully */ ++ ControlError = 1, /**< A control request to the device failed to complete successfully */ ++ DescriptorTooLarge = 2, /**< The device's Configuration Descriptor is too large to process */ ++ InvalidConfigDataReturned = 3, /**< The device returned an invalid Configuration Descriptor */ ++ NoCompatibleInterfaceFound = 4, /**< A compatible interface with the required endpoints was not found */ ++ }; ++ ++ /* Function Prototypes: */ ++ uint8_t ProcessConfigurationDescriptor(void); ++ ++ uint8_t DComp_NextMIDIStreamingInterface(void* CurrentDescriptor); ++ uint8_t DComp_NextMIDIStreamingDataEndpoint(void* CurrentDescriptor); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/LowLevel/MIDIHost/MIDIHost.c index 000000000,000000000..95043d724 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MIDIHost/MIDIHost.c @@@ -1,0 -1,0 +1,266 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 MIDIHost demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "MIDIHost.h" ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ puts_P(PSTR(ESC_FG_CYAN "MIDI Host Demo running.\r\n" ESC_FG_WHITE)); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ MIDIHost_Task(); ++ ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#endif ++ ++ /* Hardware Initialization */ ++ Serial_Init(9600, false); ++ LEDs_Init(); ++ Buttons_Init(); ++ Joystick_Init(); ++ USB_Init(); ++ ++ /* Create a stdio stream for the serial port for stdin and stdout */ ++ Serial_CreateStream(NULL); ++} ++ ++/** Event handler for the USB_DeviceAttached event. This indicates that a device has been attached to the host, and ++ * starts the library USB task to begin the enumeration and USB management process. ++ */ ++void EVENT_USB_Host_DeviceAttached(void) ++{ ++ puts_P(PSTR(ESC_FG_GREEN "Device Attached.\r\n" ESC_FG_WHITE)); ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the USB_DeviceUnattached event. This indicates that a device has been removed from the host, and ++ * stops the library USB task management process. ++ */ ++void EVENT_USB_Host_DeviceUnattached(void) ++{ ++ puts_P(PSTR(ESC_FG_GREEN "\r\nDevice Unattached.\r\n" ESC_FG_WHITE)); ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_DeviceEnumerationComplete event. This indicates that a device has been successfully ++ * enumerated by the host and is now ready to be used by the application. ++ */ ++void EVENT_USB_Host_DeviceEnumerationComplete(void) ++{ ++ puts_P(PSTR("Getting Config Data.\r\n")); ++ ++ uint8_t ErrorCode; ++ ++ /* Get and process the configuration descriptor data */ ++ if ((ErrorCode = ProcessConfigurationDescriptor()) != SuccessfulConfigRead) ++ { ++ if (ErrorCode == ControlError) ++ puts_P(PSTR(ESC_FG_RED "Control Error (Get Configuration).\r\n")); ++ else ++ puts_P(PSTR(ESC_FG_RED "Invalid Device.\r\n")); ++ ++ printf_P(PSTR(" -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ /* Set the device configuration to the first configuration (rarely do devices use multiple configurations) */ ++ if ((ErrorCode = USB_Host_SetDeviceConfiguration(1)) != HOST_SENDCONTROL_Successful) ++ { ++ printf_P(PSTR(ESC_FG_RED "Control Error (Set Configuration).\r\n" ++ " -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ puts_P(PSTR("MIDI Device Enumerated.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++} ++ ++/** Event handler for the USB_HostError event. This indicates that a hardware error occurred while in host mode. */ ++void EVENT_USB_Host_HostError(const uint8_t ErrorCode) ++{ ++ USB_Disable(); ++ ++ printf_P(PSTR(ESC_FG_RED "Host Mode Error\r\n" ++ " -- Error Code %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ for(;;); ++} ++ ++/** Event handler for the USB_DeviceEnumerationFailed event. This indicates that a problem occurred while ++ * enumerating an attached USB device. ++ */ ++void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode) ++{ ++ printf_P(PSTR(ESC_FG_RED "Dev Enum Error\r\n" ++ " -- Error Code %d\r\n" ++ " -- Sub Error Code %d\r\n" ++ " -- In State %d\r\n" ESC_FG_WHITE), ErrorCode, SubErrorCode, USB_HostState); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++} ++ ++/** Task to read in note on/off messages from the attached MIDI device and print it to the serial port. ++ * When the board joystick or buttons are pressed, note on/off messages are sent to the attached device. ++ */ ++void MIDIHost_Task(void) ++{ ++ if (USB_HostState != HOST_STATE_Configured) ++ return; ++ ++ Pipe_SelectPipe(MIDI_DATA_IN_PIPE); ++ Pipe_Unfreeze(); ++ ++ if (Pipe_IsINReceived()) ++ { ++ MIDI_EventPacket_t MIDIEvent; ++ ++ Pipe_Read_Stream_LE(&MIDIEvent, sizeof(MIDIEvent), NULL); ++ ++ if (!(Pipe_BytesInPipe())) ++ Pipe_ClearIN(); ++ ++ bool NoteOnEvent = (MIDIEvent.Event == MIDI_EVENT(0, MIDI_COMMAND_NOTE_ON)); ++ bool NoteOffEvent = (MIDIEvent.Event == MIDI_EVENT(0, MIDI_COMMAND_NOTE_OFF)); ++ ++ if (NoteOnEvent || NoteOffEvent) ++ { ++ printf_P(PSTR("MIDI Note %s - Channel %d, Pitch %d, Velocity %d\r\n"), NoteOnEvent ? "On" : "Off", ++ ((MIDIEvent.Data1 & 0x0F) + 1), ++ MIDIEvent.Data2, MIDIEvent.Data3); ++ } ++ } ++ ++ Pipe_Freeze(); ++ ++ Pipe_SelectPipe(MIDI_DATA_OUT_PIPE); ++ Pipe_Unfreeze(); ++ ++ if (Pipe_IsOUTReady()) ++ { ++ uint8_t MIDICommand = 0; ++ uint8_t MIDIPitch; ++ ++ static uint8_t PrevJoystickStatus; ++ uint8_t JoystickStatus = Joystick_GetStatus(); ++ uint8_t JoystickChanges = (JoystickStatus ^ PrevJoystickStatus); ++ ++ /* Get board button status - if pressed use channel 10 (percussion), otherwise use channel 1 */ ++ uint8_t Channel = ((Buttons_GetStatus() & BUTTONS_BUTTON1) ? MIDI_CHANNEL(10) : MIDI_CHANNEL(1)); ++ ++ if (JoystickChanges & JOY_LEFT) ++ { ++ MIDICommand = ((JoystickStatus & JOY_LEFT)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF); ++ MIDIPitch = 0x3C; ++ } ++ ++ if (JoystickChanges & JOY_UP) ++ { ++ MIDICommand = ((JoystickStatus & JOY_UP)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF); ++ MIDIPitch = 0x3D; ++ } ++ ++ if (JoystickChanges & JOY_RIGHT) ++ { ++ MIDICommand = ((JoystickStatus & JOY_RIGHT)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF); ++ MIDIPitch = 0x3E; ++ } ++ ++ if (JoystickChanges & JOY_DOWN) ++ { ++ MIDICommand = ((JoystickStatus & JOY_DOWN)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF); ++ MIDIPitch = 0x3F; ++ } ++ ++ if (JoystickChanges & JOY_PRESS) ++ { ++ MIDICommand = ((JoystickStatus & JOY_PRESS)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF); ++ MIDIPitch = 0x3B; ++ } ++ ++ /* Check if a MIDI command is to be sent */ ++ if (MIDICommand) ++ { ++ MIDI_EventPacket_t MIDIEvent = (MIDI_EventPacket_t) ++ { ++ .Event = MIDI_EVENT(0, MIDICommand), ++ ++ .Data1 = MIDICommand | Channel, ++ .Data2 = MIDIPitch, ++ .Data3 = MIDI_STANDARD_VELOCITY, ++ }; ++ ++ /* Write the MIDI event packet to the pipe */ ++ Pipe_Write_Stream_LE(&MIDIEvent, sizeof(MIDIEvent), NULL); ++ ++ /* Send the data in the pipe to the device */ ++ Pipe_ClearOUT(); ++ } ++ ++ Pipe_Freeze(); ++ ++ /* Save previous joystick value for next joystick change detection */ ++ PrevJoystickStatus = JoystickStatus; ++ } ++} ++ diff --cc lib/lufa/Demos/Host/LowLevel/MIDIHost/MIDIHost.h index 000000000,000000000..eceea0977 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MIDIHost/MIDIHost.h @@@ -1,0 -1,0 +1,82 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 MIDIHost.c. ++ */ ++ ++#ifndef _MIDI_HOST_H_ ++#define _MIDI_HOST_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/pgmspace.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <stdio.h> ++ ++ #include <LUFA/Drivers/Misc/TerminalCodes.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Drivers/Peripheral/Serial.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/Board/Buttons.h> ++ #include <LUFA/Drivers/Board/Joystick.h> ++ #include <LUFA/Platform/Platform.h> ++ ++ #include "ConfigDescriptor.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 MIDIHost_Task(void); ++ ++ void EVENT_USB_Host_HostError(const uint8_t ErrorCode); ++ void EVENT_USB_Host_DeviceAttached(void); ++ void EVENT_USB_Host_DeviceUnattached(void); ++ void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode); ++ void EVENT_USB_Host_DeviceEnumerationComplete(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/LowLevel/MIDIHost/MIDIHost.txt index 000000000,000000000..33a8319f0 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MIDIHost/MIDIHost.txt @@@ -1,0 -1,0 +1,60 @@@ ++/** \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 MIDI Host Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * ++ * \section Sec_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>Host</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Class:</b></td> ++ * <td>Audio Class Device</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>MIDI Subclass</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF USB MIDI Audio Class Standard</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * MIDI host demonstration application. This demo will enumerate an attached USB-MIDI device, and print incoming MIDI note ++ * on and off messages on any channel to the serial port. Pressing the board joystick will send note on and off messages to ++ * the attached MIDI device, with the board HWB controlling the note channel. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Host/LowLevel/MIDIHost/asf.xml index 000000000,000000000..0a19a117d new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MIDIHost/asf.xml @@@ -1,0 -1,0 +1,52 @@@ ++<asf xmlversion="1.0"> ++ <project caption="MIDI Host Demo (Low Level APIs)" id="lufa.demos.host.lowlevel.midi.example.avr8"> ++ <require idref="lufa.demos.host.lowlevel.midi"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.host.lowlevel.midi" caption="MIDI Host Demo (Low Level APIs)"> ++ <info type="description" value="summary"> ++ MIDI Host demo, capable of sending and receiving MIDI messages to and from an attached device. This demo uses the Low Level LUFA APIs to manually implement a USB Class for demonstration purposes without using the simpler in-built LUFA Class Driver APIs. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Low Level APIs"/> ++ <keyword value="USB Host"/> ++ <keyword value="MIDI Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="MIDIHost.txt"/> ++ ++ <build type="c-source" value="MIDIHost.c"/> ++ <build type="c-source" value="ConfigDescriptor.c"/> ++ <build type="header-file" value="MIDIHost.h"/> ++ <build type="header-file" value="ConfigDescriptor.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.peripheral.usart"/> ++ <require idref="lufa.drivers.misc.ansi"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ <require idref="lufa.drivers.board.buttons"/> ++ <require idref="lufa.drivers.board.joystick"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Host/LowLevel/MIDIHost/doxyfile index 000000000,000000000..7a6906a27 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MIDIHost/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - MIDI Host 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Host/LowLevel/MIDIHost/makefile index 000000000,000000000..cf24a871d new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MIDIHost/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = MIDIHost ++SRC = $(TARGET).c ConfigDescriptor.c $(LUFA_SRC_USB) $(LUFA_SRC_SERIAL) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Host/LowLevel/MassStorageHost/Config/LUFAConfig.h index 000000000,000000000..e2b5166f2 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MassStorageHost/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++// #define USB_DEVICE_ONLY ++ #define USB_HOST_ONLY ++ #define USB_STREAM_TIMEOUT_MS 5000 ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++// #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++// #define FIXED_CONTROL_ENDPOINT_SIZE {Insert Value Here} ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++// #define FIXED_NUM_CONFIGURATIONS {Insert Value Here} ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Host/LowLevel/MassStorageHost/ConfigDescriptor.c index 000000000,000000000..b65912d51 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MassStorageHost/ConfigDescriptor.c @@@ -1,0 -1,0 +1,173 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 Configuration Descriptor processing routines, to determine the correct pipe configurations ++ * needed to communication with an attached USB device. Descriptors are special computer-readable structures ++ * which the host requests upon device enumeration, to determine the device's capabilities and functions. ++ */ ++ ++#include "ConfigDescriptor.h" ++ ++/** Reads and processes an attached device's descriptors, to determine compatibility and pipe configurations. This ++ * routine will read in the entire configuration descriptor, and configure the hosts pipes to correctly communicate ++ * with compatible devices. ++ * ++ * This routine searches for a MSD interface descriptor containing bulk IN and OUT data endpoints. ++ * ++ * \return An error code from the \ref MassStorageHost_GetConfigDescriptorDataCodes_t enum. ++ */ ++uint8_t ProcessConfigurationDescriptor(void) ++{ ++ uint8_t ConfigDescriptorData[512]; ++ void* CurrConfigLocation = ConfigDescriptorData; ++ uint16_t CurrConfigBytesRem; ++ ++ USB_Descriptor_Interface_t* MSInterface = NULL; ++ USB_Descriptor_Endpoint_t* DataINEndpoint = NULL; ++ USB_Descriptor_Endpoint_t* DataOUTEndpoint = NULL; ++ ++ /* Retrieve the entire configuration descriptor into the allocated buffer */ ++ switch (USB_Host_GetDeviceConfigDescriptor(1, &CurrConfigBytesRem, ConfigDescriptorData, sizeof(ConfigDescriptorData))) ++ { ++ case HOST_GETCONFIG_Successful: ++ break; ++ case HOST_GETCONFIG_InvalidData: ++ return InvalidConfigDataReturned; ++ case HOST_GETCONFIG_BuffOverflow: ++ return DescriptorTooLarge; ++ default: ++ return ControlError; ++ } ++ ++ while (!(DataINEndpoint) || !(DataOUTEndpoint)) ++ { ++ /* See if we've found a likely compatible interface, and if there is an endpoint within that interface */ ++ if (!(MSInterface) || ++ USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, ++ DComp_NextMSInterfaceBulkDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found) ++ { ++ /* Get the next Mass Storage interface from the configuration descriptor */ ++ if (USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, ++ DComp_NextMSInterface) != DESCRIPTOR_SEARCH_COMP_Found) ++ { ++ /* Descriptor not found, error out */ ++ return NoCompatibleInterfaceFound; ++ } ++ ++ /* Save the interface in case we need to refer back to it later */ ++ MSInterface = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Interface_t); ++ ++ /* Clear any found endpoints */ ++ DataINEndpoint = NULL; ++ DataOUTEndpoint = NULL; ++ ++ /* Skip the remainder of the loop as we have not found an endpoint yet */ ++ continue; ++ } ++ ++ /* Retrieve the endpoint address from the endpoint descriptor */ ++ USB_Descriptor_Endpoint_t* EndpointData = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Endpoint_t); ++ ++ /* If the endpoint is a IN type endpoint */ ++ if ((EndpointData->EndpointAddress & ENDPOINT_DIR_MASK) == ENDPOINT_DIR_IN) ++ DataINEndpoint = EndpointData; ++ else ++ DataOUTEndpoint = EndpointData; ++ } ++ ++ /* Configure the Mass Storage data IN pipe */ ++ Pipe_ConfigurePipe(MASS_STORE_DATA_IN_PIPE, EP_TYPE_BULK, DataINEndpoint->EndpointAddress, DataINEndpoint->EndpointSize, 1); ++ ++ /* Configure the Mass Storage data OUT pipe */ ++ Pipe_ConfigurePipe(MASS_STORE_DATA_OUT_PIPE, EP_TYPE_BULK, DataOUTEndpoint->EndpointAddress, DataOUTEndpoint->EndpointSize, 1); ++ ++ /* Valid data found, return success */ ++ return SuccessfulConfigRead; ++} ++ ++/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's ++ * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration ++ * descriptor processing if an incompatible descriptor configuration is found. ++ * ++ * This comparator searches for the next Interface descriptor of the correct Mass Storage Class, Subclass and Protocol values. ++ * ++ * \return A value from the DSEARCH_Return_ErrorCodes_t enum ++ */ ++uint8_t DComp_NextMSInterface(void* CurrentDescriptor) ++{ ++ USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t); ++ ++ if (Header->Type == DTYPE_Interface) ++ { ++ USB_Descriptor_Interface_t* Interface = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Interface_t); ++ ++ /* Check the descriptor class and protocol, break out if correct class/protocol interface found */ ++ if ((Interface->Class == MASS_STORE_CLASS) && ++ (Interface->SubClass == MASS_STORE_SUBCLASS) && ++ (Interface->Protocol == MASS_STORE_PROTOCOL)) ++ { ++ return DESCRIPTOR_SEARCH_Found; ++ } ++ } ++ ++ return DESCRIPTOR_SEARCH_NotFound; ++} ++ ++/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's ++ * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration ++ * descriptor processing if an incompatible descriptor configuration is found. ++ * ++ * This comparator searches for the next Bulk Endpoint descriptor of the correct MSD interface, aborting the search if ++ * another interface descriptor is found before the next endpoint. ++ * ++ * \return A value from the DSEARCH_Return_ErrorCodes_t enum ++ */ ++uint8_t DComp_NextMSInterfaceBulkDataEndpoint(void* CurrentDescriptor) ++{ ++ USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t); ++ ++ if (Header->Type == DTYPE_Endpoint) ++ { ++ USB_Descriptor_Endpoint_t* Endpoint = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Endpoint_t); ++ ++ /* Check the endpoint type, break out if correct BULK type endpoint found */ ++ if ((Endpoint->Attributes & EP_TYPE_MASK) == EP_TYPE_BULK) ++ return DESCRIPTOR_SEARCH_Found; ++ } ++ else if (Header->Type == DTYPE_Interface) ++ { ++ return DESCRIPTOR_SEARCH_Fail; ++ } ++ ++ return DESCRIPTOR_SEARCH_NotFound; ++} ++ diff --cc lib/lufa/Demos/Host/LowLevel/MassStorageHost/ConfigDescriptor.h index 000000000,000000000..eaf4d28de new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MassStorageHost/ConfigDescriptor.h @@@ -1,0 -1,0 +1,78 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ConfigDescriptor.c. ++ */ ++ ++#ifndef _CONFIGDESCRIPTOR_H_ ++#define _CONFIGDESCRIPTOR_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include "MassStorageHost.h" ++ ++ /* Macros: */ ++ /** Interface Class value for the Mass Storage Device class. */ ++ #define MASS_STORE_CLASS 0x08 ++ ++ /** Interface Class value for the Mass Storage Device subclass. */ ++ #define MASS_STORE_SUBCLASS 0x06 ++ ++ /** Interface Protocol value for the Bulk Only transport protocol. */ ++ #define MASS_STORE_PROTOCOL 0x50 ++ ++ /** Pipe address of the Mass Storage data IN pipe. */ ++ #define MASS_STORE_DATA_IN_PIPE (PIPE_DIR_IN | 1) ++ ++ /** Pipe address of the Mass Storage data OUT pipe. */ ++ #define MASS_STORE_DATA_OUT_PIPE (PIPE_DIR_OUT | 2) ++ ++ /* Enums: */ ++ /** Enum for the possible return codes of the \ref ProcessConfigurationDescriptor() function. */ ++ enum MassStorageHost_GetConfigDescriptorDataCodes_t ++ { ++ SuccessfulConfigRead = 0, /**< Configuration Descriptor was processed successfully */ ++ ControlError = 1, /**< A control request to the device failed to complete successfully */ ++ DescriptorTooLarge = 2, /**< The device's Configuration Descriptor is too large to process */ ++ InvalidConfigDataReturned = 3, /**< The device returned an invalid Configuration Descriptor */ ++ NoCompatibleInterfaceFound = 4, /**< A compatible interface with the required endpoints was not found */ ++ }; ++ ++ /* Function Prototypes: */ ++ uint8_t ProcessConfigurationDescriptor(void); ++ ++ uint8_t DComp_NextMSInterface(void* CurrentDescriptor); ++ uint8_t DComp_NextMSInterfaceBulkDataEndpoint(void* CurrentDescriptor); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/LowLevel/MassStorageHost/Lib/MassStoreCommands.c index 000000000,000000000..5f0dd6f1a new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MassStorageHost/Lib/MassStoreCommands.c @@@ -1,0 -1,0 +1,635 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * Mass Storage Device commands, to issue MSD commands to the device for ++ * reading device status, capacity, and other characteristics. This file ++ * also contains block read and write functions, so that device blocks ++ * can be read and written. In general, these functions would be chained ++ * to a FAT library to give file-level access to an attached device's contents. ++ * ++ * \note Many Mass Storage devices on the market are non-compliant to the ++ * specifications and thus can prove difficult to interface with. It ++ * may be necessary to retry the functions in the module several times ++ * after they have returned and error to successfully send the command ++ * to the device. Some devices may also need to have the stream function ++ * timeout period extended beyond 100ms (some badly designed devices exceeding ++ * 1.5 seconds occasionally) by defining USB_STREAM_TIMEOUT_MS to a ++ * larger value in the project makefile and passing it to the compiler ++ * via the -D switch. ++ */ ++ ++#define INCLUDE_FROM_MASSSTORE_COMMANDS_C ++#include "MassStoreCommands.h" ++ ++/** Current Tag value used in issued CBWs to the device. This is automatically incremented ++ * each time a command is sent, and is not externally accessible. ++ */ ++static uint32_t MassStore_Tag = 1; ++ ++ ++/** Routine to send the current CBW to the device, and increment the Tag value as needed. ++ * ++ * \param[in] SCSICommandBlock Pointer to a SCSI command block structure to send to the attached device ++ * \param[in,out] BufferPtr Pointer to a buffer for the data to send or receive to/from the device, or NULL if no data ++ * ++ * \return A value from the Pipe_Stream_RW_ErrorCodes_t enum ++ */ ++static uint8_t MassStore_SendCommand(MS_CommandBlockWrapper_t* const SCSICommandBlock, ++ void* BufferPtr) ++{ ++ uint8_t ErrorCode = PIPE_RWSTREAM_NoError; ++ ++ /* Wrap Tag value when invalid - MS class defines tag values of 0 and 0xFFFFFFFF to be invalid */ ++ if (++MassStore_Tag == 0xFFFFFFFF) ++ MassStore_Tag = 1; ++ ++ /* Each transmission should have a unique tag value, increment before use */ ++ SCSICommandBlock->Tag = MassStore_Tag; ++ ++ /* Select the OUT data pipe for CBW transmission */ ++ Pipe_SelectPipe(MASS_STORE_DATA_OUT_PIPE); ++ Pipe_Unfreeze(); ++ ++ /* Write the CBW command to the OUT pipe */ ++ if ((ErrorCode = Pipe_Write_Stream_LE(SCSICommandBlock, sizeof(MS_CommandBlockWrapper_t), NULL)) != ++ PIPE_RWSTREAM_NoError) ++ { ++ Pipe_Freeze(); ++ return ErrorCode; ++ } ++ ++ /* Send the data in the OUT pipe to the attached device */ ++ Pipe_ClearOUT(); ++ ++ /* Wait until command has been sent */ ++ Pipe_WaitUntilReady(); ++ ++ /* Freeze pipe after use */ ++ Pipe_Freeze(); ++ ++ if (BufferPtr != NULL) ++ { ++ /* Transfer the requested data (if any) to or from the device */ ++ ErrorCode = MassStore_SendReceiveData(SCSICommandBlock, (void*)BufferPtr); ++ ++ /* Only fail completely if the transfer fails without a STALL, as a logical STALL can be recovered from */ ++ if ((ErrorCode != PIPE_RWSTREAM_NoError) && (ErrorCode != PIPE_RWSTREAM_PipeStalled)) ++ { ++ Pipe_Freeze(); ++ return ErrorCode; ++ } ++ } ++ ++ /* Retrieve the returned SCSI status from the device */ ++ MS_CommandStatusWrapper_t SCSIStatusBlock; ++ return MassStore_GetReturnedStatus(&SCSIStatusBlock); ++} ++ ++/** Waits until the attached device is ready to accept data following a CBW, checking ++ * to ensure that the device has not stalled the transaction. ++ * ++ * \return A value from the Pipe_Stream_RW_ErrorCodes_t enum ++ */ ++static uint8_t MassStore_WaitForDataReceived(void) ++{ ++ uint16_t TimeoutMSRem = COMMAND_DATA_TIMEOUT_MS; ++ uint16_t PreviousFrameNumber = USB_Host_GetFrameNumber(); ++ ++ /* Select the IN data pipe for data reception */ ++ Pipe_SelectPipe(MASS_STORE_DATA_IN_PIPE); ++ Pipe_Unfreeze(); ++ ++ /* Wait until data received in the IN pipe */ ++ while (!(Pipe_IsINReceived())) ++ { ++ uint16_t CurrentFrameNumber = USB_Host_GetFrameNumber(); ++ ++ /* Check to see if a new frame has been issued (1ms elapsed) */ ++ if (CurrentFrameNumber != PreviousFrameNumber) ++ { ++ /* Save the new frame number and decrement the timeout period */ ++ PreviousFrameNumber = CurrentFrameNumber; ++ TimeoutMSRem--; ++ ++ /* Check to see if the timeout period for the command has elapsed */ ++ if (!(TimeoutMSRem)) ++ return PIPE_RWSTREAM_Timeout; ++ } ++ ++ Pipe_Freeze(); ++ Pipe_SelectPipe(MASS_STORE_DATA_OUT_PIPE); ++ Pipe_Unfreeze(); ++ ++ /* Check if pipe stalled (command failed by device) */ ++ if (Pipe_IsStalled()) ++ { ++ /* Clear the stall condition on the OUT pipe */ ++ USB_Host_ClearEndpointStall(Pipe_GetBoundEndpointAddress()); ++ ++ return PIPE_RWSTREAM_PipeStalled; ++ } ++ ++ Pipe_Freeze(); ++ Pipe_SelectPipe(MASS_STORE_DATA_IN_PIPE); ++ Pipe_Unfreeze(); ++ ++ /* Check if pipe stalled (command failed by device) */ ++ if (Pipe_IsStalled()) ++ { ++ /* Clear the stall condition on the IN pipe */ ++ USB_Host_ClearEndpointStall(Pipe_GetBoundEndpointAddress()); ++ ++ return PIPE_RWSTREAM_PipeStalled; ++ } ++ ++ /* Check to see if the device was disconnected, if so exit function */ ++ if (USB_HostState == HOST_STATE_Unattached) ++ return PIPE_RWSTREAM_DeviceDisconnected; ++ }; ++ ++ Pipe_SelectPipe(MASS_STORE_DATA_IN_PIPE); ++ Pipe_Freeze(); ++ ++ Pipe_SelectPipe(MASS_STORE_DATA_OUT_PIPE); ++ Pipe_Freeze(); ++ ++ return PIPE_RWSTREAM_NoError; ++} ++ ++/** Sends or receives the transaction's data stage to or from the attached device, reading or ++ * writing to the nominated buffer. ++ * ++ * \param[in] SCSICommandBlock Pointer to a SCSI command block structure being sent to the attached device ++ * \param[in,out] BufferPtr Pointer to the data buffer to read from or write to ++ * ++ * \return A value from the Pipe_Stream_RW_ErrorCodes_t enum ++ */ ++static uint8_t MassStore_SendReceiveData(MS_CommandBlockWrapper_t* const SCSICommandBlock, ++ void* BufferPtr) ++{ ++ uint8_t ErrorCode = PIPE_RWSTREAM_NoError; ++ uint16_t BytesRem = SCSICommandBlock->DataTransferLength; ++ ++ /* Check the direction of the SCSI command data stage */ ++ if (SCSICommandBlock->Flags & MS_COMMAND_DIR_DATA_IN) ++ { ++ /* Wait until the device has replied with some data */ ++ if ((ErrorCode = MassStore_WaitForDataReceived()) != PIPE_RWSTREAM_NoError) ++ return ErrorCode; ++ ++ /* Select the IN data pipe for data reception */ ++ Pipe_SelectPipe(MASS_STORE_DATA_IN_PIPE); ++ Pipe_Unfreeze(); ++ ++ /* Read in the block data from the pipe */ ++ if ((ErrorCode = Pipe_Read_Stream_LE(BufferPtr, BytesRem, NULL)) != PIPE_RWSTREAM_NoError) ++ return ErrorCode; ++ ++ /* Acknowledge the packet */ ++ Pipe_ClearIN(); ++ } ++ else ++ { ++ /* Select the OUT data pipe for data transmission */ ++ Pipe_SelectPipe(MASS_STORE_DATA_OUT_PIPE); ++ Pipe_Unfreeze(); ++ ++ /* Write the block data to the pipe */ ++ if ((ErrorCode = Pipe_Write_Stream_LE(BufferPtr, BytesRem, NULL)) != PIPE_RWSTREAM_NoError) ++ return ErrorCode; ++ ++ /* Acknowledge the packet */ ++ Pipe_ClearOUT(); ++ ++ while (!(Pipe_IsOUTReady())) ++ { ++ if (USB_HostState == HOST_STATE_Unattached) ++ return PIPE_RWSTREAM_DeviceDisconnected; ++ } ++ } ++ ++ /* Freeze used pipe after use */ ++ Pipe_Freeze(); ++ ++ return PIPE_RWSTREAM_NoError; ++} ++ ++/** Routine to receive the current CSW from the device. ++ * ++ * \param[out] SCSICommandStatus Pointer to a destination where the returned status data should be stored ++ * ++ * \return A value from the Pipe_Stream_RW_ErrorCodes_t enum, or MASS_STORE_SCSI_COMMAND_FAILED if the SCSI command fails ++ */ ++static uint8_t MassStore_GetReturnedStatus(MS_CommandStatusWrapper_t* const SCSICommandStatus) ++{ ++ uint8_t ErrorCode = PIPE_RWSTREAM_NoError; ++ ++ /* If an error in the command occurred, abort */ ++ if ((ErrorCode = MassStore_WaitForDataReceived()) != PIPE_RWSTREAM_NoError) ++ return ErrorCode; ++ ++ /* Select the IN data pipe for data reception */ ++ Pipe_SelectPipe(MASS_STORE_DATA_IN_PIPE); ++ Pipe_Unfreeze(); ++ ++ /* Load in the CSW from the attached device */ ++ if ((ErrorCode = Pipe_Read_Stream_LE(SCSICommandStatus, sizeof(MS_CommandStatusWrapper_t), NULL)) != ++ PIPE_RWSTREAM_NoError) ++ { ++ return ErrorCode; ++ } ++ ++ /* Clear the data ready for next reception */ ++ Pipe_ClearIN(); ++ ++ /* Freeze the IN pipe after use */ ++ Pipe_Freeze(); ++ ++ /* Check to see if command failed */ ++ if (SCSICommandStatus->Status != MS_SCSI_COMMAND_Pass) ++ ErrorCode = MASS_STORE_SCSI_COMMAND_FAILED; ++ ++ return ErrorCode; ++} ++ ++/** Issues a Mass Storage class specific request to reset the attached device's Mass Storage interface, ++ * readying the device for the next CBW. The Data endpoints are cleared of any STALL condition once this ++ * command completes successfully. ++ * ++ * \return A value from the USB_Host_SendControlErrorCodes_t enum, or MASS_STORE_SCSI_COMMAND_FAILED if the SCSI command fails ++ */ ++uint8_t MassStore_MassStorageReset(void) ++{ ++ uint8_t ErrorCode; ++ ++ USB_ControlRequest = (USB_Request_Header_t) ++ { ++ .bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE), ++ .bRequest = MS_REQ_MassStorageReset, ++ .wValue = 0, ++ .wIndex = 0, ++ .wLength = 0, ++ }; ++ ++ /* Select the control pipe for the request transfer */ ++ Pipe_SelectPipe(PIPE_CONTROLPIPE); ++ ++ if ((ErrorCode = USB_Host_SendControlRequest(NULL)) != HOST_SENDCONTROL_Successful) ++ return ErrorCode; ++ ++ /* Select first data pipe to clear STALL condition if one exists */ ++ Pipe_SelectPipe(MASS_STORE_DATA_IN_PIPE); ++ ++ if ((ErrorCode = USB_Host_ClearEndpointStall(Pipe_GetBoundEndpointAddress())) != HOST_SENDCONTROL_Successful) ++ return ErrorCode; ++ ++ /* Select second data pipe to clear STALL condition if one exists */ ++ Pipe_SelectPipe(MASS_STORE_DATA_OUT_PIPE); ++ ++ if ((ErrorCode = USB_Host_ClearEndpointStall(Pipe_GetBoundEndpointAddress())) != HOST_SENDCONTROL_Successful) ++ return ErrorCode; ++ ++ return HOST_SENDCONTROL_Successful; ++} ++ ++/** Issues a Mass Storage class specific request to determine the index of the highest numbered Logical ++ * Unit in the attached device. ++ * ++ * \note Some devices do not support this request, and will STALL it when issued. To get around this, ++ * on unsupported devices the max LUN index will be reported as zero and no error will be returned ++ * if the device STALLs the request. ++ * ++ * \param[out] MaxLUNIndex Pointer to the location that the maximum LUN index value should be stored ++ * ++ * \return A value from the USB_Host_SendControlErrorCodes_t enum, or MASS_STORE_SCSI_COMMAND_FAILED if the SCSI command fails ++ */ ++uint8_t MassStore_GetMaxLUN(uint8_t* const MaxLUNIndex) ++{ ++ uint8_t ErrorCode; ++ ++ USB_ControlRequest = (USB_Request_Header_t) ++ { ++ .bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE), ++ .bRequest = MS_REQ_GetMaxLUN, ++ .wValue = 0, ++ .wIndex = 0, ++ .wLength = 1, ++ }; ++ ++ /* Select the control pipe for the request transfer */ ++ Pipe_SelectPipe(PIPE_CONTROLPIPE); ++ ++ if ((ErrorCode = USB_Host_SendControlRequest(MaxLUNIndex)) == HOST_SENDCONTROL_SetupStalled) ++ { ++ /* Clear the pipe stall */ ++ Pipe_ClearStall(); ++ ++ /* Some faulty Mass Storage devices don't implement the GET_MAX_LUN request, so assume a single LUN */ ++ *MaxLUNIndex = 0; ++ ++ /* Clear the error, and pretend the request executed correctly if the device STALLed it */ ++ ErrorCode = HOST_SENDCONTROL_Successful; ++ } ++ ++ return ErrorCode; ++} ++ ++/** Issues a SCSI Inquiry command to the attached device, to determine the device's information. This ++ * gives information on the device's capabilities. ++ * ++ * \param[in] LUNIndex Index of the LUN inside the device the command is being addressed to ++ * \param[out] InquiryPtr Pointer to the inquiry data structure where the inquiry data from the device is to be stored ++ * ++ * \return A value from the Pipe_Stream_RW_ErrorCodes_t enum, or MASS_STORE_SCSI_COMMAND_FAILED if the SCSI command fails ++ */ ++uint8_t MassStore_Inquiry(const uint8_t LUNIndex, ++ SCSI_Inquiry_Response_t* const InquiryPtr) ++{ ++ /* Create a CBW with a SCSI command to issue INQUIRY command */ ++ MS_CommandBlockWrapper_t SCSICommandBlock = (MS_CommandBlockWrapper_t) ++ { ++ .Signature = MS_CBW_SIGNATURE, ++ .DataTransferLength = sizeof(SCSI_Inquiry_Response_t), ++ .Flags = MS_COMMAND_DIR_DATA_IN, ++ .LUN = LUNIndex, ++ .SCSICommandLength = 6, ++ .SCSICommandData = ++ { ++ SCSI_CMD_INQUIRY, ++ 0x00, // Reserved ++ 0x00, // Reserved ++ 0x00, // Reserved ++ sizeof(SCSI_Inquiry_Response_t), // Allocation Length ++ 0x00 // Unused (control) ++ } ++ }; ++ ++ /* Send the command and any data to the attached device */ ++ return MassStore_SendCommand(&SCSICommandBlock, InquiryPtr); ++} ++ ++/** Issues a SCSI Request Sense command to the attached device, to determine the current SCSI sense information. This ++ * gives error codes for the last issued SCSI command to the device. ++ * ++ * \param[in] LUNIndex Index of the LUN inside the device the command is being addressed to ++ * \param[out] SensePtr Pointer to the sense data structure where the sense data from the device is to be stored ++ * ++ * \return A value from the Pipe_Stream_RW_ErrorCodes_t enum, or MASS_STORE_SCSI_COMMAND_FAILED if the SCSI command fails ++ */ ++uint8_t MassStore_RequestSense(const uint8_t LUNIndex, ++ SCSI_Request_Sense_Response_t* const SensePtr) ++{ ++ /* Create a CBW with a SCSI command to issue REQUEST SENSE command */ ++ MS_CommandBlockWrapper_t SCSICommandBlock = (MS_CommandBlockWrapper_t) ++ { ++ .Signature = MS_CBW_SIGNATURE, ++ .DataTransferLength = sizeof(SCSI_Request_Sense_Response_t), ++ .Flags = MS_COMMAND_DIR_DATA_IN, ++ .LUN = LUNIndex, ++ .SCSICommandLength = 6, ++ .SCSICommandData = ++ { ++ SCSI_CMD_REQUEST_SENSE, ++ 0x00, // Reserved ++ 0x00, // Reserved ++ 0x00, // Reserved ++ sizeof(SCSI_Request_Sense_Response_t), // Allocation Length ++ 0x00 // Unused (control) ++ } ++ }; ++ ++ /* Send the command and any data to the attached device */ ++ return MassStore_SendCommand(&SCSICommandBlock, SensePtr); ++} ++ ++/** Issues a SCSI Device Block Read command to the attached device, to read in one or more data blocks from the ++ * storage medium into a buffer. ++ * ++ * \param[in] LUNIndex Index of the LUN inside the device the command is being addressed to ++ * \param[in] BlockAddress Start block address to read from ++ * \param[in] Blocks Number of blocks to read from the device ++ * \param[in] BlockSize Size in bytes of each block to read ++ * \param[out] BufferPtr Pointer to the buffer where the read data is to be written to ++ * ++ * \return A value from the Pipe_Stream_RW_ErrorCodes_t enum, or MASS_STORE_SCSI_COMMAND_FAILED if the SCSI command fails ++ */ ++uint8_t MassStore_ReadDeviceBlock(const uint8_t LUNIndex, ++ const uint32_t BlockAddress, ++ const uint8_t Blocks, ++ const uint16_t BlockSize, ++ void* BufferPtr) ++{ ++ /* Create a CBW with a SCSI command to read in the given blocks from the device */ ++ MS_CommandBlockWrapper_t SCSICommandBlock = (MS_CommandBlockWrapper_t) ++ { ++ .Signature = MS_CBW_SIGNATURE, ++ .DataTransferLength = ((uint32_t)Blocks * BlockSize), ++ .Flags = MS_COMMAND_DIR_DATA_IN, ++ .LUN = LUNIndex, ++ .SCSICommandLength = 10, ++ .SCSICommandData = ++ { ++ SCSI_CMD_READ_10, ++ 0x00, // Unused (control bits, all off) ++ (BlockAddress >> 24), // MSB of Block Address ++ (BlockAddress >> 16), ++ (BlockAddress >> 8), ++ (BlockAddress & 0xFF), // LSB of Block Address ++ 0x00, // Reserved ++ 0x00, // MSB of Total Blocks to Read ++ Blocks, // LSB of Total Blocks to Read ++ 0x00 // Unused (control) ++ } ++ }; ++ ++ /* Send the command and any data to the attached device */ ++ return MassStore_SendCommand(&SCSICommandBlock, BufferPtr); ++} ++ ++/** Issues a SCSI Device Block Write command to the attached device, to write one or more data blocks to the ++ * storage medium from a buffer. ++ * ++ * \param[in] LUNIndex Index of the LUN inside the device the command is being addressed to ++ * \param[in] BlockAddress Start block address to write to ++ * \param[in] Blocks Number of blocks to write to in the device ++ * \param[in] BlockSize Size in bytes of each block to write ++ * \param[in] BufferPtr Pointer to the buffer where the write data is to be sourced from ++ * ++ * \return A value from the Pipe_Stream_RW_ErrorCodes_t enum, or MASS_STORE_SCSI_COMMAND_FAILED if the SCSI command fails ++ */ ++uint8_t MassStore_WriteDeviceBlock(const uint8_t LUNIndex, ++ const uint32_t BlockAddress, ++ const uint8_t Blocks, ++ const uint16_t BlockSize, ++ void* BufferPtr) ++{ ++ /* Create a CBW with a SCSI command to write the given blocks to the device */ ++ MS_CommandBlockWrapper_t SCSICommandBlock = (MS_CommandBlockWrapper_t) ++ { ++ .Signature = MS_CBW_SIGNATURE, ++ .DataTransferLength = ((uint32_t)Blocks * BlockSize), ++ .Flags = MS_COMMAND_DIR_DATA_OUT, ++ .LUN = LUNIndex, ++ .SCSICommandLength = 10, ++ .SCSICommandData = ++ { ++ SCSI_CMD_WRITE_10, ++ 0x00, // Unused (control bits, all off) ++ (BlockAddress >> 24), // MSB of Block Address ++ (BlockAddress >> 16), ++ (BlockAddress >> 8), ++ (BlockAddress & 0xFF), // LSB of Block Address ++ 0x00, // Unused (reserved) ++ 0x00, // MSB of Total Blocks to Write ++ Blocks, // LSB of Total Blocks to Write ++ 0x00 // Unused (control) ++ } ++ }; ++ ++ /* Send the command and any data to the attached device */ ++ return MassStore_SendCommand(&SCSICommandBlock, BufferPtr); ++} ++ ++/** Issues a SCSI Device Test Unit Ready command to the attached device, to determine if the device is ready to accept ++ * other commands. ++ * ++ * \param[in] LUNIndex Index of the LUN inside the device the command is being addressed to ++ * ++ * \return A value from the Pipe_Stream_RW_ErrorCodes_t enum, or MASS_STORE_SCSI_COMMAND_FAILED if the SCSI command fails ++ */ ++uint8_t MassStore_TestUnitReady(const uint8_t LUNIndex) ++{ ++ /* Create a CBW with a SCSI command to issue TEST UNIT READY command */ ++ MS_CommandBlockWrapper_t SCSICommandBlock = (MS_CommandBlockWrapper_t) ++ { ++ .Signature = MS_CBW_SIGNATURE, ++ .DataTransferLength = 0, ++ .Flags = MS_COMMAND_DIR_DATA_IN, ++ .LUN = LUNIndex, ++ .SCSICommandLength = 6, ++ .SCSICommandData = ++ { ++ SCSI_CMD_TEST_UNIT_READY, ++ 0x00, // Reserved ++ 0x00, // Reserved ++ 0x00, // Reserved ++ 0x00, // Reserved ++ 0x00 // Unused (control) ++ } ++ }; ++ ++ /* Send the command and any data to the attached device */ ++ return MassStore_SendCommand(&SCSICommandBlock, NULL); ++} ++ ++/** Issues a SCSI Device Read Capacity command to the attached device, to determine the capacity of the ++ * given Logical Unit within the device. ++ * ++ * \param[in] LUNIndex Index of the LUN inside the device the command is being addressed to ++ * \param[out] CapacityPtr Device capacity structure where the capacity data is to be stored ++ * ++ * \return A value from the Pipe_Stream_RW_ErrorCodes_t enum, or MASS_STORE_SCSI_COMMAND_FAILED if the SCSI command fails ++ */ ++uint8_t MassStore_ReadCapacity(const uint8_t LUNIndex, ++ SCSI_Capacity_t* const CapacityPtr) ++{ ++ uint8_t ErrorCode = PIPE_RWSTREAM_NoError; ++ ++ /* Create a CBW with a SCSI command to issue READ CAPACITY command */ ++ MS_CommandBlockWrapper_t SCSICommandBlock = (MS_CommandBlockWrapper_t) ++ { ++ .Signature = MS_CBW_SIGNATURE, ++ .DataTransferLength = sizeof(SCSI_Capacity_t), ++ .Flags = MS_COMMAND_DIR_DATA_IN, ++ .LUN = LUNIndex, ++ .SCSICommandLength = 10, ++ .SCSICommandData = ++ { ++ SCSI_CMD_READ_CAPACITY_10, ++ 0x00, // Reserved ++ 0x00, // MSB of Logical block address ++ 0x00, ++ 0x00, ++ 0x00, // LSB of Logical block address ++ 0x00, // Reserved ++ 0x00, // Reserved ++ 0x00, // Partial Medium Indicator ++ 0x00 // Unused (control) ++ } ++ }; ++ ++ /* Send the command and any data to the attached device */ ++ if ((ErrorCode = MassStore_SendCommand(&SCSICommandBlock, CapacityPtr)) != PIPE_RWSTREAM_NoError) ++ return ErrorCode; ++ ++ /* Endian-correct the read data */ ++ CapacityPtr->Blocks = SwapEndian_32(CapacityPtr->Blocks); ++ CapacityPtr->BlockSize = SwapEndian_32(CapacityPtr->BlockSize); ++ ++ return ErrorCode; ++} ++ ++/** Issues a SCSI Device Prevent/Allow Medium Removal command to the attached device, to lock the physical media from ++ * being removed. This is a legacy command for SCSI disks with removable storage (such as ZIP disks), but should still ++ * be issued before the first read or write command is sent. ++ * ++ * \param[in] LUNIndex Index of the LUN inside the device the command is being addressed to ++ * \param[in] PreventRemoval Whether or not the LUN media should be locked to prevent removal or not ++ * ++ * \return A value from the Pipe_Stream_RW_ErrorCodes_t enum, or MASS_STORE_SCSI_COMMAND_FAILED if the SCSI command fails ++ */ ++uint8_t MassStore_PreventAllowMediumRemoval(const uint8_t LUNIndex, ++ const bool PreventRemoval) ++{ ++ /* Create a CBW with a SCSI command to issue PREVENT ALLOW MEDIUM REMOVAL command */ ++ MS_CommandBlockWrapper_t SCSICommandBlock = (MS_CommandBlockWrapper_t) ++ { ++ .Signature = MS_CBW_SIGNATURE, ++ .DataTransferLength = 0, ++ .Flags = MS_COMMAND_DIR_DATA_OUT, ++ .LUN = LUNIndex, ++ .SCSICommandLength = 6, ++ .SCSICommandData = ++ { ++ SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL, ++ 0x00, // Reserved ++ 0x00, // Reserved ++ PreventRemoval, // Prevent flag ++ 0x00, // Reserved ++ 0x00 // Unused (control) ++ } ++ }; ++ ++ /* Send the command and any data to the attached device */ ++ return MassStore_SendCommand(&SCSICommandBlock, NULL); ++} ++ diff --cc lib/lufa/Demos/Host/LowLevel/MassStorageHost/Lib/MassStoreCommands.h index 000000000,000000000..444768748 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MassStorageHost/Lib/MassStoreCommands.h @@@ -1,0 -1,0 +1,86 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 MassStoreCommands.c. ++ */ ++ ++#ifndef _MASS_STORE_COMMANDS_H_ ++#define _MASS_STORE_COMMANDS_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ ++ #include "../MassStorageHost.h" ++ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ /* Macros: */ ++ /** Timeout period between the issuing of a CBW to a device, and the reception of the first packet. */ ++ #define COMMAND_DATA_TIMEOUT_MS 10000 ++ ++ /** Additional error code for Mass Storage functions when a device returns a logical command failure. */ ++ #define MASS_STORE_SCSI_COMMAND_FAILED 0xC0 ++ ++ /* Function Prototypes: */ ++ #if defined(INCLUDE_FROM_MASSSTORE_COMMANDS_C) ++ static uint8_t MassStore_SendCommand(MS_CommandBlockWrapper_t* const SCSICommandBlock, ++ void* BufferPtr); ++ static uint8_t MassStore_WaitForDataReceived(void); ++ static uint8_t MassStore_SendReceiveData(MS_CommandBlockWrapper_t* const SCSICommandBlock, ++ void* BufferPtr) ATTR_NON_NULL_PTR_ARG(1); ++ static uint8_t MassStore_GetReturnedStatus(MS_CommandStatusWrapper_t* const SCSICommandStatus) ATTR_NON_NULL_PTR_ARG(1); ++ #endif ++ ++ uint8_t MassStore_MassStorageReset(void); ++ uint8_t MassStore_GetMaxLUN(uint8_t* const MaxLUNIndex); ++ uint8_t MassStore_RequestSense(const uint8_t LUNIndex, ++ SCSI_Request_Sense_Response_t* const SensePtr) ATTR_NON_NULL_PTR_ARG(2); ++ uint8_t MassStore_Inquiry(const uint8_t LUNIndex, ++ SCSI_Inquiry_Response_t* const InquiryPtr) ATTR_NON_NULL_PTR_ARG(2); ++ uint8_t MassStore_ReadDeviceBlock(const uint8_t LUNIndex, ++ const uint32_t BlockAddress, ++ const uint8_t Blocks, ++ const uint16_t BlockSize, ++ void* BufferPtr) ATTR_NON_NULL_PTR_ARG(5); ++ uint8_t MassStore_WriteDeviceBlock(const uint8_t LUNIndex, ++ const uint32_t BlockAddress, ++ const uint8_t Blocks, ++ const uint16_t BlockSize, ++ void* BufferPtr) ATTR_NON_NULL_PTR_ARG(5); ++ uint8_t MassStore_ReadCapacity(const uint8_t LUNIndex, ++ SCSI_Capacity_t* const CapacityPtr) ATTR_NON_NULL_PTR_ARG(2); ++ uint8_t MassStore_TestUnitReady(const uint8_t LUNIndex); ++ uint8_t MassStore_PreventAllowMediumRemoval(const uint8_t LUNIndex, ++ const bool PreventRemoval); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/LowLevel/MassStorageHost/MassStorageHost.c index 000000000,000000000..4d5247043 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MassStorageHost/MassStorageHost.c @@@ -1,0 -1,0 +1,373 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 MassStorageHost demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "MassStorageHost.h" ++ ++/** Index of the highest available LUN (Logical Unit) in the attached Mass Storage Device */ ++uint8_t MassStore_MaxLUNIndex; ++ ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ puts_P(PSTR(ESC_FG_CYAN "Mass Storage Host Demo running.\r\n" ESC_FG_WHITE)); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ MassStorageHost_Task(); ++ ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#endif ++ ++ /* Hardware Initialization */ ++ Serial_Init(9600, false); ++ LEDs_Init(); ++ Buttons_Init(); ++ USB_Init(); ++ ++ /* Create a stdio stream for the serial port for stdin and stdout */ ++ Serial_CreateStream(NULL); ++} ++ ++/** Event handler for the USB_DeviceAttached event. This indicates that a device has been attached to the host, and ++ * starts the library USB task to begin the enumeration and USB management process. ++ */ ++void EVENT_USB_Host_DeviceAttached(void) ++{ ++ puts_P(PSTR(ESC_FG_GREEN "Device Attached.\r\n" ESC_FG_WHITE)); ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the USB_DeviceUnattached event. This indicates that a device has been removed from the host, and ++ * stops the library USB task management process. ++ */ ++void EVENT_USB_Host_DeviceUnattached(void) ++{ ++ puts_P(PSTR(ESC_FG_GREEN "\r\nDevice Unattached.\r\n" ESC_FG_WHITE)); ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_DeviceEnumerationComplete event. This indicates that a device has been successfully ++ * enumerated by the host and is now ready to be used by the application. ++ */ ++void EVENT_USB_Host_DeviceEnumerationComplete(void) ++{ ++ puts_P(PSTR("Getting Config Data.\r\n")); ++ ++ uint8_t ErrorCode; ++ ++ /* Get and process the configuration descriptor data */ ++ if ((ErrorCode = ProcessConfigurationDescriptor()) != SuccessfulConfigRead) ++ { ++ if (ErrorCode == ControlError) ++ puts_P(PSTR(ESC_FG_RED "Control Error (Get Configuration).\r\n")); ++ else ++ puts_P(PSTR(ESC_FG_RED "Invalid Device.\r\n")); ++ ++ printf_P(PSTR(" -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ /* Set the device configuration to the first configuration (rarely do devices use multiple configurations) */ ++ if ((ErrorCode = USB_Host_SetDeviceConfiguration(1)) != HOST_SENDCONTROL_Successful) ++ { ++ printf_P(PSTR(ESC_FG_RED "Control Error (Set Configuration).\r\n" ++ " -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ puts_P(PSTR("Mass Storage Disk Enumerated.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++} ++ ++/** Event handler for the USB_HostError event. This indicates that a hardware error occurred while in host mode. */ ++void EVENT_USB_Host_HostError(const uint8_t ErrorCode) ++{ ++ USB_Disable(); ++ ++ printf_P(PSTR(ESC_FG_RED "Host Mode Error\r\n" ++ " -- Error Code %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ for(;;); ++} ++ ++/** Event handler for the USB_DeviceEnumerationFailed event. This indicates that a problem occurred while ++ * enumerating an attached USB device. ++ */ ++void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode) ++{ ++ printf_P(PSTR(ESC_FG_RED "Dev Enum Error\r\n" ++ " -- Error Code %d\r\n" ++ " -- Sub Error Code %d\r\n" ++ " -- In State %d\r\n" ESC_FG_WHITE), ErrorCode, SubErrorCode, USB_HostState); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++} ++ ++/** Task to set the configuration of the attached device after it has been enumerated, and to read in blocks from ++ * the device and print them to the serial port. ++ */ ++void MassStorageHost_Task(void) ++{ ++ if (USB_HostState != HOST_STATE_Configured) ++ return; ++ ++ /* Indicate device busy via the status LEDs */ ++ LEDs_SetAllLEDs(LEDMASK_USB_BUSY); ++ ++ uint8_t ErrorCode; ++ ++ /* Send the request, display error and wait for device detach if request fails */ ++ if ((ErrorCode = MassStore_GetMaxLUN(&MassStore_MaxLUNIndex)) != HOST_SENDCONTROL_Successful) ++ { ++ ShowDiskReadError(PSTR("Get Max LUN"), ErrorCode); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ /* Print number of LUNs detected in the attached device */ ++ printf_P(PSTR("Total LUNs: %d - Using first LUN in device.\r\n"), (MassStore_MaxLUNIndex + 1)); ++ ++ /* Reset the Mass Storage device interface, ready for use */ ++ if ((ErrorCode = MassStore_MassStorageReset()) != HOST_SENDCONTROL_Successful) ++ { ++ ShowDiskReadError(PSTR("Mass Storage Reset"), ErrorCode); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ /* Get sense data from the device - many devices will not accept any other commands until the sense data ++ * is read - both on start-up and after a failed command */ ++ SCSI_Request_Sense_Response_t SenseData; ++ if ((ErrorCode = MassStore_RequestSense(0, &SenseData)) != 0) ++ { ++ ShowDiskReadError(PSTR("Request Sense"), ErrorCode); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ /* Set the prevent removal flag for the device, allowing it to be accessed */ ++ if ((ErrorCode = MassStore_PreventAllowMediumRemoval(0, true)) != 0) ++ { ++ ShowDiskReadError(PSTR("Prevent/Allow Medium Removal"), ErrorCode); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ /* Get inquiry data from the device */ ++ SCSI_Inquiry_Response_t InquiryData; ++ if ((ErrorCode = MassStore_Inquiry(0, &InquiryData)) != 0) ++ { ++ ShowDiskReadError(PSTR("Inquiry"), ErrorCode); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ /* Print vendor and product names of attached device */ ++ printf_P(PSTR("Vendor \"%.8s\", Product \"%.16s\"\r\n"), InquiryData.VendorID, InquiryData.ProductID); ++ ++ /* Wait until disk ready */ ++ puts_P(PSTR("Waiting until ready..")); ++ ++ for (;;) ++ { ++ Serial_SendByte('.'); ++ ++ /* Abort if device removed */ ++ if (USB_HostState == HOST_STATE_Unattached) ++ break; ++ ++ /* Check to see if the attached device is ready for new commands */ ++ ErrorCode = MassStore_TestUnitReady(0); ++ ++ /* If attached device is ready, abort the loop */ ++ if (!(ErrorCode)) ++ break; ++ ++ /* If an error other than a logical command failure (indicating device busy) returned, abort */ ++ if (ErrorCode != MASS_STORE_SCSI_COMMAND_FAILED) ++ { ++ ShowDiskReadError(PSTR("Test Unit Ready"), ErrorCode); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ } ++ ++ puts_P(PSTR("\r\nRetrieving Capacity... ")); ++ ++ /* Create new structure for the disk's capacity in blocks and block size */ ++ SCSI_Capacity_t DiskCapacity; ++ ++ /* Retrieve disk capacity */ ++ if ((ErrorCode = MassStore_ReadCapacity(0, &DiskCapacity)) != 0) ++ { ++ ShowDiskReadError(PSTR("Read Capacity"), ErrorCode); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ /* Display the disk capacity in blocks * block size bytes */ ++ printf_P(PSTR("%lu blocks of %lu bytes.\r\n"), DiskCapacity.Blocks, DiskCapacity.BlockSize); ++ ++ /* Create a new buffer capable of holding a single block from the device */ ++ uint8_t BlockBuffer[DiskCapacity.BlockSize]; ++ ++ /* Read in the first 512 byte block from the device */ ++ if ((ErrorCode = MassStore_ReadDeviceBlock(0, 0x00000000, 1, DiskCapacity.BlockSize, BlockBuffer)) != 0) ++ { ++ ShowDiskReadError(PSTR("Read Device Block"), ErrorCode); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ puts_P(PSTR("\r\nContents of first block:\r\n")); ++ ++ /* Print out the first block in both HEX and ASCII, 16 bytes per line */ ++ for (uint16_t Chunk = 0; Chunk < (DiskCapacity.BlockSize >> 4); Chunk++) ++ { ++ /* Pointer to the start of the current 16-byte chunk in the read block of data */ ++ uint8_t* ChunkPtr = &BlockBuffer[Chunk << 4]; ++ ++ /* Print out the 16 bytes of the chunk in HEX format */ ++ for (uint8_t ByteOffset = 0; ByteOffset < (1 << 4); ByteOffset++) ++ { ++ char CurrByte = *(ChunkPtr + ByteOffset); ++ ++ printf_P(PSTR("%.2X "), CurrByte); ++ } ++ ++ puts_P(PSTR(" ")); ++ ++ /* Print out the 16 bytes of the chunk in ASCII format */ ++ for (uint8_t ByteOffset = 0; ByteOffset < (1 << 4); ByteOffset++) ++ { ++ char CurrByte = *(ChunkPtr + ByteOffset); ++ ++ putchar(isprint(CurrByte) ? CurrByte : '.'); ++ } ++ ++ puts_P(PSTR("\r\n")); ++ } ++ ++ puts_P(PSTR("\r\n\r\nPress board button to read entire ASCII contents of disk...\r\n\r\n")); ++ ++ /* Wait for the board button to be pressed */ ++ while (!(Buttons_GetStatus() & BUTTONS_BUTTON1)) ++ { ++ /* Abort if device removed */ ++ if (USB_HostState == HOST_STATE_Unattached) ++ return; ++ } ++ ++ /* Print out the entire disk contents in ASCII format */ ++ for (uint32_t CurrBlockAddress = 0; CurrBlockAddress < DiskCapacity.Blocks; CurrBlockAddress++) ++ { ++ /* Read in the next block of data from the device */ ++ if ((ErrorCode = MassStore_ReadDeviceBlock(0, CurrBlockAddress, 1, DiskCapacity.BlockSize, BlockBuffer)) != 0) ++ { ++ ShowDiskReadError(PSTR("Read Device Block"), ErrorCode); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ /* Send the ASCII data in the read in block to the serial port */ ++ for (uint16_t Byte = 0; Byte < DiskCapacity.BlockSize; Byte++) ++ { ++ char CurrByte = BlockBuffer[Byte]; ++ ++ putchar(isprint(CurrByte) ? CurrByte : '.'); ++ } ++ } ++ ++ /* Indicate device no longer busy */ ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++ USB_Host_SetDeviceConfiguration(0); ++} ++ ++/** Indicates that a communication error has occurred with the attached Mass Storage Device, ++ * printing error codes to the serial port and waiting until the device is removed before ++ * continuing. ++ * ++ * \param[in] CommandString ASCII string located in PROGMEM space indicating what operation failed ++ * \param[in] ErrorCode Error code of the function which failed to complete successfully ++ */ ++void ShowDiskReadError(const char* CommandString, ++ const uint8_t ErrorCode) ++{ ++ if (ErrorCode == MASS_STORE_SCSI_COMMAND_FAILED) ++ { ++ /* Display the error code */ ++ printf_P(PSTR(ESC_FG_RED "SCSI command error (%S).\r\n"), CommandString); ++ } ++ else ++ { ++ /* Display the error code */ ++ printf_P(PSTR(ESC_FG_RED "Command error (%S).\r\n"), CommandString); ++ printf_P(PSTR(" -- Error Code: %d" ESC_FG_WHITE), ErrorCode); ++ } ++ ++ Pipe_Freeze(); ++ ++ /* Indicate device error via the status LEDs */ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++} ++ diff --cc lib/lufa/Demos/Host/LowLevel/MassStorageHost/MassStorageHost.h index 000000000,000000000..8459ecfe0 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MassStorageHost/MassStorageHost.h @@@ -1,0 -1,0 +1,91 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 MassStoreHost.c. ++ */ ++ ++#ifndef _MASS_STORE_HOST_H_ ++#define _MASS_STORE_HOST_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/pgmspace.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <stdio.h> ++ #include <ctype.h> ++ #include <string.h> ++ ++ #include "ConfigDescriptor.h" ++ ++ #include "Lib/MassStoreCommands.h" ++ ++ #include <LUFA/Drivers/Misc/TerminalCodes.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Drivers/Peripheral/Serial.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/Board/Buttons.h> ++ #include <LUFA/Platform/Platform.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) ++ ++ /** LED mask for the library LED driver, to indicate that the USB interface is busy. */ ++ #define LEDMASK_USB_BUSY LEDS_LED2 ++ ++ /* Function Prototypes: */ ++ void SetupHardware(void); ++ void MassStorageHost_Task(void); ++ ++ void EVENT_USB_Host_HostError(const uint8_t ErrorCode); ++ void EVENT_USB_Host_DeviceAttached(void); ++ void EVENT_USB_Host_DeviceUnattached(void); ++ void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode); ++ void EVENT_USB_Host_DeviceEnumerationComplete(void); ++ ++ void ShowDiskReadError(const char* CommandString, ++ const uint8_t ErrorCode); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/LowLevel/MassStorageHost/MassStorageHost.txt index 000000000,000000000..4b07261c4 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MassStorageHost/MassStorageHost.txt @@@ -1,0 -1,0 +1,68 @@@ ++/** \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 Mass Storage Host Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * ++ * \section Sec_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>Host</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Class:</b></td> ++ * <td>Mass Storage Device</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>Bulk Only</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF Mass Storage Standard \n ++ * USB Bulk-Only Transport Standard \n ++ * SCSI Primary Commands Specification \n ++ * SCSI Block Commands Specification</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Mass Storage host demonstration application. This gives a simple reference ++ * application for implementing a USB Mass Storage host, for USB storage devices ++ * using the standard Mass Storage USB profile. ++ * ++ * The first 512 bytes (boot sector) of an attached disk's memory will be dumped ++ * out of the serial port in HEX and ASCII form when it is attached to the AT90USB1287 ++ * AVR. The device will then wait for HWB to be pressed, whereupon the entire ASCII contents ++ * of the disk will be dumped to the serial port. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Host/LowLevel/MassStorageHost/asf.xml index 000000000,000000000..8f04f692e new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MassStorageHost/asf.xml @@@ -1,0 -1,0 +1,53 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Mass Storage Host Demo (Low Level APIs)" id="lufa.demos.host.lowlevel.ms.example.avr8"> ++ <require idref="lufa.demos.host.lowlevel.ms"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.host.lowlevel.ms" caption="Mass Storage Host Demo (Low Level APIs)"> ++ <info type="description" value="summary"> ++ Mass Storage Host demo, capable of reading and writing raw 512 byte segments to the device's serial port. This demo uses the Low Level LUFA APIs to manually implement a USB Class for demonstration purposes without using the simpler in-built LUFA Class Driver APIs. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Low Level APIs"/> ++ <keyword value="USB Host"/> ++ <keyword value="Mass Storage Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="MassStorageHost.txt"/> ++ ++ <build type="c-source" value="MassStorageHost.c"/> ++ <build type="c-source" value="ConfigDescriptor.c"/> ++ <build type="header-file" value="MassStorageHost.h"/> ++ <build type="header-file" value="ConfigDescriptor.h"/> ++ ++ <build type="c-source" value="Lib/MassStoreCommands.c"/> ++ <build type="header-file" value="Lib/MassStoreCommands.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.peripheral.usart"/> ++ <require idref="lufa.drivers.misc.ansi"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Host/LowLevel/MassStorageHost/doxyfile index 000000000,000000000..58657165c new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MassStorageHost/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Mass Storage Host 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Host/LowLevel/MassStorageHost/makefile index 000000000,000000000..ad1bddec9 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MassStorageHost/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = MassStorageHost ++SRC = $(TARGET).c ConfigDescriptor.c Lib/MassStoreCommands.c $(LUFA_SRC_USB) $(LUFA_SRC_SERIAL) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Host/LowLevel/MouseHost/Config/LUFAConfig.h index 000000000,000000000..197122fce new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MouseHost/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++// #define USB_DEVICE_ONLY ++ #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++// #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++// #define FIXED_CONTROL_ENDPOINT_SIZE {Insert Value Here} ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++// #define FIXED_NUM_CONFIGURATIONS {Insert Value Here} ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Host/LowLevel/MouseHost/ConfigDescriptor.c index 000000000,000000000..a7c16425c new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MouseHost/ConfigDescriptor.c @@@ -1,0 -1,0 +1,159 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 Configuration Descriptor processing routines, to determine the correct pipe configurations ++ * needed to communication with an attached USB device. Descriptors are special computer-readable structures ++ * which the host requests upon device enumeration, to determine the device's capabilities and functions. ++ */ ++ ++#include "ConfigDescriptor.h" ++ ++/** Reads and processes an attached device's descriptors, to determine compatibility and pipe configurations. This ++ * routine will read in the entire configuration descriptor, and configure the hosts pipes to correctly communicate ++ * with compatible devices. ++ * ++ * This routine searches for a HID interface descriptor containing at least one Interrupt type IN endpoint. ++ * ++ * \return An error code from the \ref MouseHost_GetConfigDescriptorDataCodes_t enum. ++ */ ++uint8_t ProcessConfigurationDescriptor(void) ++{ ++ uint8_t ConfigDescriptorData[512]; ++ void* CurrConfigLocation = ConfigDescriptorData; ++ uint16_t CurrConfigBytesRem; ++ ++ USB_Descriptor_Interface_t* HIDInterface = NULL; ++ USB_Descriptor_Endpoint_t* DataINEndpoint = NULL; ++ ++ /* Retrieve the entire configuration descriptor into the allocated buffer */ ++ switch (USB_Host_GetDeviceConfigDescriptor(1, &CurrConfigBytesRem, ConfigDescriptorData, sizeof(ConfigDescriptorData))) ++ { ++ case HOST_GETCONFIG_Successful: ++ break; ++ case HOST_GETCONFIG_InvalidData: ++ return InvalidConfigDataReturned; ++ case HOST_GETCONFIG_BuffOverflow: ++ return DescriptorTooLarge; ++ default: ++ return ControlError; ++ } ++ ++ while (!(DataINEndpoint)) ++ { ++ /* See if we've found a likely compatible interface, and if there is an endpoint within that interface */ ++ if (!(HIDInterface) || ++ USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, ++ DComp_NextMouseInterfaceDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found) ++ { ++ /* Get the next HID interface from the configuration descriptor */ ++ if (USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, ++ DComp_NextMouseInterface) != DESCRIPTOR_SEARCH_COMP_Found) ++ { ++ /* Descriptor not found, error out */ ++ return NoCompatibleInterfaceFound; ++ } ++ ++ /* Save the interface in case we need to refer back to it later */ ++ HIDInterface = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Interface_t); ++ ++ /* Skip the remainder of the loop as we have not found an endpoint yet */ ++ continue; ++ } ++ ++ /* Retrieve the endpoint address from the endpoint descriptor */ ++ USB_Descriptor_Endpoint_t* EndpointData = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Endpoint_t); ++ ++ /* If the endpoint is a IN type endpoint */ ++ if ((EndpointData->EndpointAddress & ENDPOINT_DIR_MASK) == ENDPOINT_DIR_IN) ++ DataINEndpoint = EndpointData; ++ } ++ ++ /* Configure the HID data IN pipe */ ++ Pipe_ConfigurePipe(MOUSE_DATA_IN_PIPE, EP_TYPE_INTERRUPT, DataINEndpoint->EndpointAddress, DataINEndpoint->EndpointSize, 1); ++ Pipe_SetInterruptPeriod(DataINEndpoint->PollingIntervalMS); ++ ++ /* Valid data found, return success */ ++ return SuccessfulConfigRead; ++} ++ ++/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's ++ * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration ++ * descriptor processing if an incompatible descriptor configuration is found. ++ * ++ * This comparator searches for the next Interface descriptor of the correct Mouse HID Class and Protocol values. ++ * ++ * \return A value from the DSEARCH_Return_ErrorCodes_t enum ++ */ ++uint8_t DComp_NextMouseInterface(void* CurrentDescriptor) ++{ ++ USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t); ++ ++ /* Determine if the current descriptor is an interface descriptor */ ++ if (Header->Type == DTYPE_Interface) ++ { ++ USB_Descriptor_Interface_t* Interface = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Interface_t); ++ ++ /* Check the HID descriptor class and protocol, break out if correct class/protocol interface found */ ++ if ((Interface->Class == HID_CSCP_HIDClass) && ++ (Interface->Protocol == HID_CSCP_MouseBootProtocol)) ++ { ++ /* Indicate that the descriptor being searched for has been found */ ++ return DESCRIPTOR_SEARCH_Found; ++ } ++ } ++ ++ /* Current descriptor does not match what this comparator is looking for */ ++ return DESCRIPTOR_SEARCH_NotFound; ++} ++ ++/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's ++ * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration ++ * descriptor processing if an incompatible descriptor configuration is found. ++ * ++ * This comparator searches for the next Endpoint descriptor inside the current interface descriptor, aborting the ++ * search if another interface descriptor is found before the required endpoint. ++ * ++ * \return A value from the DSEARCH_Return_ErrorCodes_t enum ++ */ ++uint8_t DComp_NextMouseInterfaceDataEndpoint(void* CurrentDescriptor) ++{ ++ USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t); ++ ++ /* Determine the type of the current descriptor */ ++ if (Header->Type == DTYPE_Endpoint) ++ return DESCRIPTOR_SEARCH_Found; ++ else if (Header->Type == DTYPE_Interface) ++ return DESCRIPTOR_SEARCH_Fail; ++ else ++ return DESCRIPTOR_SEARCH_NotFound; ++} ++ diff --cc lib/lufa/Demos/Host/LowLevel/MouseHost/ConfigDescriptor.h index 000000000,000000000..9a84559e4 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MouseHost/ConfigDescriptor.h @@@ -1,0 -1,0 +1,66 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ConfigDescriptor.c. ++ */ ++ ++#ifndef _CONFIGDESCRIPTOR_H_ ++#define _CONFIGDESCRIPTOR_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include "MouseHost.h" ++ ++ /* Macros: */ ++ /** Pipe address for the mouse data IN pipe. */ ++ #define MOUSE_DATA_IN_PIPE (PIPE_DIR_IN | 1) ++ ++ /* Enums: */ ++ /** Enum for the possible return codes of the \ref ProcessConfigurationDescriptor() function. */ ++ enum MouseHost_GetConfigDescriptorDataCodes_t ++ { ++ SuccessfulConfigRead = 0, /**< Configuration Descriptor was processed successfully */ ++ ControlError = 1, /**< A control request to the device failed to complete successfully */ ++ DescriptorTooLarge = 2, /**< The device's Configuration Descriptor is too large to process */ ++ InvalidConfigDataReturned = 3, /**< The device returned an invalid Configuration Descriptor */ ++ NoCompatibleInterfaceFound = 4, /**< A compatible interface with the required endpoints was not found */ ++ }; ++ ++ /* Function Prototypes: */ ++ uint8_t ProcessConfigurationDescriptor(void); ++ ++ uint8_t DComp_NextMouseInterface(void* CurrentDescriptor); ++ uint8_t DComp_NextMouseInterfaceDataEndpoint(void* CurrentDescriptor); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/LowLevel/MouseHost/MouseHost.c index 000000000,000000000..d05cde41a new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MouseHost/MouseHost.c @@@ -1,0 -1,0 +1,250 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 MouseHost demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "MouseHost.h" ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ puts_P(PSTR(ESC_FG_CYAN "Mouse HID Host Demo running.\r\n" ESC_FG_WHITE)); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ MouseHost_Task(); ++ ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#endif ++ ++ /* Hardware Initialization */ ++ Serial_Init(9600, false); ++ LEDs_Init(); ++ USB_Init(); ++ ++ /* Create a stdio stream for the serial port for stdin and stdout */ ++ Serial_CreateStream(NULL); ++} ++ ++/** Event handler for the USB_DeviceAttached event. This indicates that a device has been attached to the host, and ++ * starts the library USB task to begin the enumeration and USB management process. ++ */ ++void EVENT_USB_Host_DeviceAttached(void) ++{ ++ puts_P(PSTR(ESC_FG_GREEN "Device Attached.\r\n" ESC_FG_WHITE)); ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the USB_DeviceUnattached event. This indicates that a device has been removed from the host, and ++ * stops the library USB task management process. ++ */ ++void EVENT_USB_Host_DeviceUnattached(void) ++{ ++ puts_P(PSTR(ESC_FG_GREEN "Device Unattached.\r\n" ESC_FG_WHITE)); ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_DeviceEnumerationComplete event. This indicates that a device has been successfully ++ * enumerated by the host and is now ready to be used by the application. ++ */ ++void EVENT_USB_Host_DeviceEnumerationComplete(void) ++{ ++ puts_P(PSTR("Getting Config Data.\r\n")); ++ ++ uint8_t ErrorCode; ++ ++ /* Get and process the configuration descriptor data */ ++ if ((ErrorCode = ProcessConfigurationDescriptor()) != SuccessfulConfigRead) ++ { ++ if (ErrorCode == ControlError) ++ puts_P(PSTR(ESC_FG_RED "Control Error (Get Configuration).\r\n")); ++ else ++ puts_P(PSTR(ESC_FG_RED "Invalid Device.\r\n")); ++ ++ printf_P(PSTR(" -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ /* Set the device configuration to the first configuration (rarely do devices use multiple configurations) */ ++ if ((ErrorCode = USB_Host_SetDeviceConfiguration(1)) != HOST_SENDCONTROL_Successful) ++ { ++ printf_P(PSTR(ESC_FG_RED "Control Error (Set Configuration).\r\n" ++ " -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ /* HID class request to set the mouse protocol to the Boot Protocol */ ++ USB_ControlRequest = (USB_Request_Header_t) ++ { ++ .bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE), ++ .bRequest = HID_REQ_SetProtocol, ++ .wValue = 0, ++ .wIndex = 0, ++ .wLength = 0, ++ }; ++ ++ /* Select the control pipe for the request transfer */ ++ Pipe_SelectPipe(PIPE_CONTROLPIPE); ++ ++ /* Send the request, display error and wait for device detach if request fails */ ++ if ((ErrorCode = USB_Host_SendControlRequest(NULL)) != HOST_SENDCONTROL_Successful) ++ { ++ printf_P(PSTR(ESC_FG_RED "Control Error (Set Protocol).\r\n" ++ " -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ puts_P(PSTR("Mouse Enumerated.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++} ++ ++/** Event handler for the USB_HostError event. This indicates that a hardware error occurred while in host mode. */ ++void EVENT_USB_Host_HostError(const uint8_t ErrorCode) ++{ ++ USB_Disable(); ++ ++ printf_P(PSTR(ESC_FG_RED "Host Mode Error\r\n" ++ " -- Error Code %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ for(;;); ++} ++ ++/** Event handler for the USB_DeviceEnumerationFailed event. This indicates that a problem occurred while ++ * enumerating an attached USB device. ++ */ ++void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode) ++{ ++ printf_P(PSTR(ESC_FG_RED "Dev Enum Error\r\n" ++ " -- Error Code %d\r\n" ++ " -- Sub Error Code %d\r\n" ++ " -- In State %d\r\n" ESC_FG_WHITE), ErrorCode, SubErrorCode, USB_HostState); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++} ++ ++/** Reads in and processes the next report from the attached device, displaying the report ++ * contents on the board LEDs and via the serial port. ++ */ ++void MouseHost_Task(void) ++{ ++ if (USB_HostState != HOST_STATE_Configured) ++ return; ++ ++ USB_MouseReport_Data_t MouseReport; ++ uint8_t LEDMask = LEDS_NO_LEDS; ++ ++ /* Select mouse data pipe */ ++ Pipe_SelectPipe(MOUSE_DATA_IN_PIPE); ++ ++ /* Unfreeze mouse data pipe */ ++ Pipe_Unfreeze(); ++ ++ /* Check to see if a packet has been received */ ++ if (!(Pipe_IsINReceived())) ++ { ++ /* No packet received (no movement), turn off LEDs */ ++ LEDs_SetAllLEDs(LEDS_NO_LEDS); ++ ++ /* Refreeze HID data IN pipe */ ++ Pipe_Freeze(); ++ ++ return; ++ } ++ ++ /* Ensure pipe contains data before trying to read from it */ ++ if (Pipe_IsReadWriteAllowed()) ++ { ++ /* Read in mouse report data */ ++ Pipe_Read_Stream_LE(&MouseReport, sizeof(MouseReport), NULL); ++ ++ /* Alter status LEDs according to mouse X movement */ ++ if (MouseReport.X > 0) ++ LEDMask |= LEDS_LED1; ++ else if (MouseReport.X < 0) ++ LEDMask |= LEDS_LED2; ++ ++ /* Alter status LEDs according to mouse Y movement */ ++ if (MouseReport.Y > 0) ++ LEDMask |= LEDS_LED3; ++ else if (MouseReport.Y < 0) ++ LEDMask |= LEDS_LED4; ++ ++ /* Alter status LEDs according to mouse button position */ ++ if (MouseReport.Button) ++ LEDMask = LEDS_ALL_LEDS; ++ ++ LEDs_SetAllLEDs(LEDMask); ++ ++ /* Print mouse report data through the serial port */ ++ printf_P(PSTR("dX:%2d dY:%2d Button:%d\r\n"), MouseReport.X, ++ MouseReport.Y, ++ MouseReport.Button); ++ } ++ ++ /* Clear the IN endpoint, ready for next data packet */ ++ Pipe_ClearIN(); ++ ++ /* Refreeze mouse data pipe */ ++ Pipe_Freeze(); ++} ++ diff --cc lib/lufa/Demos/Host/LowLevel/MouseHost/MouseHost.h index 000000000,000000000..58b863ab9 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MouseHost/MouseHost.h @@@ -1,0 -1,0 +1,82 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 MouseHost.c. ++ */ ++ ++#ifndef _MOUSE_HOST_H_ ++#define _MOUSE_HOST_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/pgmspace.h> ++ #include <avr/interrupt.h> ++ #include <avr/power.h> ++ #include <stdio.h> ++ ++ #include <LUFA/Drivers/Misc/TerminalCodes.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Drivers/Peripheral/Serial.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Platform/Platform.h> ++ ++ #include "ConfigDescriptor.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 MouseHost_Task(void); ++ ++ void EVENT_USB_Host_HostError(const uint8_t ErrorCode); ++ void EVENT_USB_Host_DeviceAttached(void); ++ void EVENT_USB_Host_DeviceUnattached(void); ++ void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode); ++ void EVENT_USB_Host_DeviceEnumerationComplete(void); ++ ++ void ReadNextReport(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/LowLevel/MouseHost/MouseHost.txt index 000000000,000000000..29364537b new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MouseHost/MouseHost.txt @@@ -1,0 -1,0 +1,74 @@@ ++/** \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 Mouse Host Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * ++ * \section Sec_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>Host</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Class:</b></td> ++ * <td>Human Interface Device (HID)</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>N/A</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF HID Specification \n ++ * USBIF HID Usage Tables</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Low Speed Mode \n ++ * Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Mouse host demonstration application. This gives a simple reference ++ * application for implementing a USB Mouse host, for USB mice using ++ * the standard mouse HID profile. ++ * ++ * Mouse movement and button presses are displayed on the board LEDs, ++ * as well as printed out the serial terminal as formatted dY, dY and ++ * button status information. ++ * ++ * This uses a naive method where the mouse is set to Boot Protocol mode, so ++ * that the report structure is fixed and known. A better implementation ++ * uses the HID report parser for correct report data processing across ++ * all compatible mice with advanced characteristics, as shown in the ++ * MouseHostWithParser demo application. ++ * ++ * Currently only single interface mice are supported. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Host/LowLevel/MouseHost/asf.xml index 000000000,000000000..4499986b3 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MouseHost/asf.xml @@@ -1,0 -1,0 +1,50 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Mouse HID Host Demo (Low Level APIs)" id="lufa.demos.host.lowlevel.mouse.example.avr8"> ++ <require idref="lufa.demos.host.lowlevel.mouse"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.host.lowlevel.mouse" caption="Mouse HID Host Demo (Low Level APIs)"> ++ <info type="description" value="summary"> ++ Keyboard HID Host demo, implementing a basic USB mouse host that can display movement data on the board LEDs. This demo uses the Low Level LUFA APIs to manually implement a USB Class for demonstration purposes without using the simpler in-built LUFA Class Driver APIs. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Low Level APIs"/> ++ <keyword value="USB Host"/> ++ <keyword value="HID Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="MouseHost.txt"/> ++ ++ <build type="c-source" value="MouseHost.c"/> ++ <build type="c-source" value="ConfigDescriptor.c"/> ++ <build type="header-file" value="MouseHost.h"/> ++ <build type="header-file" value="ConfigDescriptor.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.peripheral.usart"/> ++ <require idref="lufa.drivers.misc.ansi"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Host/LowLevel/MouseHost/doxyfile index 000000000,000000000..a025dd58d new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MouseHost/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Mouse Host 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Host/LowLevel/MouseHost/makefile index 000000000,000000000..4fb6c13c8 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MouseHost/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = MouseHost ++SRC = $(TARGET).c ConfigDescriptor.c $(LUFA_SRC_USB) $(LUFA_SRC_SERIAL) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Host/LowLevel/MouseHostWithParser/Config/LUFAConfig.h index 000000000,000000000..197122fce new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MouseHostWithParser/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++// #define USB_DEVICE_ONLY ++ #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++// #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++// #define FIXED_CONTROL_ENDPOINT_SIZE {Insert Value Here} ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++// #define FIXED_NUM_CONFIGURATIONS {Insert Value Here} ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Host/LowLevel/MouseHostWithParser/ConfigDescriptor.c index 000000000,000000000..c2c6301e0 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MouseHostWithParser/ConfigDescriptor.c @@@ -1,0 -1,0 +1,187 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 Configuration Descriptor processing routines, to determine the correct pipe configurations ++ * needed to communication with an attached USB device. Descriptors are special computer-readable structures ++ * which the host requests upon device enumeration, to determine the device's capabilities and functions. ++ */ ++ ++#include "ConfigDescriptor.h" ++ ++/** Reads and processes an attached device's descriptors, to determine compatibility and pipe configurations. This ++ * routine will read in the entire configuration descriptor, and configure the hosts pipes to correctly communicate ++ * with compatible devices. ++ * ++ * This routine searches for a HID interface descriptor containing at least one Interrupt type IN endpoint and HID descriptor. ++ * ++ * \return An error code from the \ref MouseHostWithParser_GetConfigDescriptorDataCodes_t enum. ++ */ ++uint8_t ProcessConfigurationDescriptor(void) ++{ ++ uint8_t ConfigDescriptorData[512]; ++ void* CurrConfigLocation = ConfigDescriptorData; ++ uint16_t CurrConfigBytesRem; ++ ++ USB_Descriptor_Interface_t* HIDInterface = NULL; ++ USB_HID_Descriptor_HID_t* HIDDescriptor = NULL; ++ USB_Descriptor_Endpoint_t* DataINEndpoint = NULL; ++ ++ /* Retrieve the entire configuration descriptor into the allocated buffer */ ++ switch (USB_Host_GetDeviceConfigDescriptor(1, &CurrConfigBytesRem, ConfigDescriptorData, sizeof(ConfigDescriptorData))) ++ { ++ case HOST_GETCONFIG_Successful: ++ break; ++ case HOST_GETCONFIG_InvalidData: ++ return InvalidConfigDataReturned; ++ case HOST_GETCONFIG_BuffOverflow: ++ return DescriptorTooLarge; ++ default: ++ return ControlError; ++ } ++ ++ while (!(DataINEndpoint)) ++ { ++ /* See if we've found a likely compatible interface, and if there is an endpoint within that interface */ ++ if (!(HIDInterface) || ++ USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, ++ DComp_NextMouseInterfaceDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found) ++ { ++ /* Get the next HID interface from the configuration descriptor */ ++ if (USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, ++ DComp_NextMouseInterface) != DESCRIPTOR_SEARCH_COMP_Found) ++ { ++ /* Descriptor not found, error out */ ++ return NoCompatibleInterfaceFound; ++ } ++ ++ /* Save the interface in case we need to refer back to it later */ ++ HIDInterface = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Interface_t); ++ ++ /* Get the HID descriptor from the configuration descriptor */ ++ if (USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, ++ DComp_NextHID) != DESCRIPTOR_SEARCH_COMP_Found) ++ { ++ /* Descriptor not found, error out */ ++ return NoCompatibleInterfaceFound; ++ } ++ ++ /* Save the HID descriptor for later use */ ++ HIDDescriptor = DESCRIPTOR_PCAST(CurrConfigLocation, USB_HID_Descriptor_HID_t); ++ ++ /* Skip the remainder of the loop as we have not found an endpoint yet */ ++ continue; ++ } ++ ++ /* Retrieve the endpoint address from the endpoint descriptor */ ++ USB_Descriptor_Endpoint_t* EndpointData = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Endpoint_t); ++ ++ /* If the endpoint is a IN type endpoint */ ++ if ((EndpointData->EndpointAddress & ENDPOINT_DIR_MASK) == ENDPOINT_DIR_IN) ++ DataINEndpoint = EndpointData; ++ } ++ ++ /* Configure the HID data IN pipe */ ++ Pipe_ConfigurePipe(MOUSE_DATA_IN_PIPE, EP_TYPE_INTERRUPT, DataINEndpoint->EndpointAddress, DataINEndpoint->EndpointSize, 1); ++ Pipe_SetInterruptPeriod(DataINEndpoint->PollingIntervalMS); ++ ++ /* Get the HID report size from the HID report descriptor */ ++ HIDReportSize = HIDDescriptor->HIDReportLength; ++ ++ /* Valid data found, return success */ ++ return SuccessfulConfigRead; ++} ++ ++/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's ++ * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration ++ * descriptor processing if an incompatible descriptor configuration is found. ++ * ++ * This comparator searches for the next Interface descriptor of the correct Mouse HID Class and Protocol values. ++ * ++ * \return A value from the DSEARCH_Return_ErrorCodes_t enum ++ */ ++uint8_t DComp_NextMouseInterface(void* CurrentDescriptor) ++{ ++ USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t); ++ ++ if (Header->Type == DTYPE_Interface) ++ { ++ USB_Descriptor_Interface_t* Interface = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Interface_t); ++ ++ /* Check the HID descriptor class, break out if correct class interface found */ ++ if (Interface->Class == HID_CSCP_HIDClass) ++ { ++ return DESCRIPTOR_SEARCH_Found; ++ } ++ } ++ ++ return DESCRIPTOR_SEARCH_NotFound; ++} ++ ++/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's ++ * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration ++ * descriptor processing if an incompatible descriptor configuration is found. ++ * ++ * This comparator searches for the next Endpoint descriptor inside the current interface descriptor, aborting the ++ * search if another interface descriptor is found before the required endpoint. ++ * ++ * \return A value from the DSEARCH_Return_ErrorCodes_t enum ++ */ ++uint8_t DComp_NextMouseInterfaceDataEndpoint(void* CurrentDescriptor) ++{ ++ USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t); ++ ++ if (Header->Type == DTYPE_Endpoint) ++ return DESCRIPTOR_SEARCH_Found; ++ else if (Header->Type == DTYPE_Interface) ++ return DESCRIPTOR_SEARCH_Fail; ++ else ++ return DESCRIPTOR_SEARCH_NotFound; ++} ++ ++/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's ++ * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration ++ * descriptor processing if an incompatible descriptor configuration is found. ++ * ++ * This comparator searches for the next HID descriptor within the current HID interface descriptor. ++ * ++ * \return A value from the DSEARCH_Return_ErrorCodes_t enum ++ */ ++uint8_t DComp_NextHID(void* CurrentDescriptor) ++{ ++ USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t); ++ ++ if (Header->Type == HID_DTYPE_HID) ++ return DESCRIPTOR_SEARCH_Found; ++ else ++ return DESCRIPTOR_SEARCH_NotFound; ++} ++ diff --cc lib/lufa/Demos/Host/LowLevel/MouseHostWithParser/ConfigDescriptor.h index 000000000,000000000..c43e17626 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MouseHostWithParser/ConfigDescriptor.h @@@ -1,0 -1,0 +1,67 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ConfigDescriptor.c. ++ */ ++ ++#ifndef _CONFIGDESCRIPTOR_H_ ++#define _CONFIGDESCRIPTOR_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include "HIDReport.h" ++ ++ /* Macros: */ ++ /** Pipe address for the mouse report data IN pipe. */ ++ #define MOUSE_DATA_IN_PIPE (ENDPOINT_DIR_IN | 1) ++ ++ /* Enums: */ ++ /** Enum for the possible return codes of the \ref ProcessConfigurationDescriptor() function. */ ++ enum MouseHostWithParser_GetConfigDescriptorDataCodes_t ++ { ++ SuccessfulConfigRead = 0, /**< Configuration Descriptor was processed successfully */ ++ ControlError = 1, /**< A control request to the device failed to complete successfully */ ++ DescriptorTooLarge = 2, /**< The device's Configuration Descriptor is too large to process */ ++ InvalidConfigDataReturned = 3, /**< The device returned an invalid Configuration Descriptor */ ++ NoCompatibleInterfaceFound = 4, /**< A compatible interface with the required endpoints was not found */ ++ }; ++ ++ /* Function Prototypes: */ ++ uint8_t ProcessConfigurationDescriptor(void); ++ ++ uint8_t DComp_NextMouseInterface(void* CurrentDescriptor); ++ uint8_t DComp_NextMouseInterfaceDataEndpoint(void* CurrentDescriptor); ++ uint8_t DComp_NextHID(void* CurrentDescriptor); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/LowLevel/MouseHostWithParser/HIDReport.c index 000000000,000000000..3ec766fbd new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MouseHostWithParser/HIDReport.c @@@ -1,0 -1,0 +1,111 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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. ++*/ ++ ++#include "HIDReport.h" ++ ++/** Size in bytes of the attached device's HID report descriptor */ ++uint16_t HIDReportSize; ++ ++/** Processed HID report descriptor items structure, containing information on each HID report element */ ++HID_ReportInfo_t HIDReportInfo; ++ ++ ++/** Function to read in the HID report descriptor from the attached device, and process it into easy-to-read ++ * structures via the HID parser routines in the LUFA library. ++ * ++ * \return A value from the \ref MouseHostWithParser_GetHIDReportDataCodes_t enum ++ */ ++uint8_t GetHIDReportData(void) ++{ ++ /* Create a buffer big enough to hold the entire returned HID report */ ++ uint8_t HIDReportData[HIDReportSize]; ++ ++ USB_ControlRequest = (USB_Request_Header_t) ++ { ++ .bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_INTERFACE), ++ .bRequest = REQ_GetDescriptor, ++ .wValue = (HID_DTYPE_Report << 8), ++ .wIndex = 0, ++ .wLength = HIDReportSize, ++ }; ++ ++ /* Select the control pipe for the request transfer */ ++ Pipe_SelectPipe(PIPE_CONTROLPIPE); ++ ++ /* Send control request to retrieve the HID report from the attached device */ ++ if (USB_Host_SendControlRequest(HIDReportData) != HOST_SENDCONTROL_Successful) ++ return ParseControlError; ++ ++ /* Send the HID report to the parser for processing */ ++ if (USB_ProcessHIDReport(HIDReportData, HIDReportSize, &HIDReportInfo) != HID_PARSE_Successful) ++ return ParseError; ++ ++ return ParseSuccessful; ++} ++ ++/** Callback for the HID Report Parser. This function is called each time the HID report parser is about to store ++ * an IN, OUT or FEATURE item into the HIDReportInfo structure. To save on RAM, we are able to filter out items ++ * we aren't interested in (preventing us from being able to extract them later on, but saving on the RAM they would ++ * have occupied). ++ * ++ * \param[in] CurrentItem Pointer to the item the HID report parser is currently working with ++ * ++ * \return Boolean \c true if the item should be stored into the HID report structure, \c false if it should be discarded ++ */ ++bool CALLBACK_HIDParser_FilterHIDReportItem(HID_ReportItem_t* const CurrentItem) ++{ ++ bool IsMouse = false; ++ ++ /* Iterate through the item's collection path, until either the root collection node or a collection with the ++ * Mouse Usage is found - this prevents Joysticks, which use identical descriptors except for the Joystick usage ++ * parent node, from being erroneously treated as a mouse ++ */ ++ for (HID_CollectionPath_t* CurrPath = CurrentItem->CollectionPath; CurrPath != NULL; CurrPath = CurrPath->Parent) ++ { ++ if ((CurrPath->Usage.Page == USAGE_PAGE_GENERIC_DCTRL) && ++ (CurrPath->Usage.Usage == USAGE_MOUSE)) ++ { ++ IsMouse = true; ++ break; ++ } ++ } ++ ++ /* If a collection with the mouse usage was not found, indicate that we are not interested in this item */ ++ if (!IsMouse) ++ return false; ++ ++ /* Check the attributes of the current mouse item - see if we are interested in it or not; ++ * only store BUTTON and GENERIC_DESKTOP_CONTROL items into the Processed HID Report ++ * structure to save RAM and ignore the rest ++ */ ++ return ((CurrentItem->Attributes.Usage.Page == USAGE_PAGE_BUTTON) || ++ (CurrentItem->Attributes.Usage.Page == USAGE_PAGE_GENERIC_DCTRL)); ++} ++ diff --cc lib/lufa/Demos/Host/LowLevel/MouseHostWithParser/HIDReport.h index 000000000,000000000..1296f57a7 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MouseHostWithParser/HIDReport.h @@@ -1,0 -1,0 +1,82 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 HIDReport.c. ++ */ ++ ++#ifndef _HID_REPORT_H_ ++#define _HID_REPORT_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include "MouseHostWithParser.h" ++ ++ /* Macros: */ ++ /** HID Report Descriptor Usage for a Mouse. */ ++ #define USAGE_MOUSE 0x02 ++ ++ /** HID Report Descriptor Usage Page value for a toggle button. */ ++ #define USAGE_PAGE_BUTTON 0x09 ++ ++ /** HID Report Descriptor Usage Page value for a Generic Desktop Control. */ ++ #define USAGE_PAGE_GENERIC_DCTRL 0x01 ++ ++ /** HID Report Descriptor Usage value for a X axis movement. */ ++ #define USAGE_X 0x30 ++ ++ /** HID Report Descriptor Usage value for a Y axis movement. */ ++ #define USAGE_Y 0x31 ++ ++ /** HID Report Descriptor Usage value for a Scroll Wheel movement. */ ++ #define USAGE_SCROLL_WHEEL 0x38 ++ ++ /* Enums: */ ++ /** Enum for the possible return codes of the \ref GetHIDReportData() function. */ ++ enum MouseHostWithParser_GetHIDReportDataCodes_t ++ { ++ ParseSuccessful = 0, /**< HID report descriptor parsed successfully */ ++ ParseError = 1, /**< Failed to fully process the HID report descriptor */ ++ ParseControlError = 2, /**< Control error occurred while trying to read the device HID descriptor */ ++ }; ++ ++ /* External Variables: */ ++ extern uint16_t HIDReportSize; ++ extern HID_ReportInfo_t HIDReportInfo; ++ ++ /* Function Prototypes: */ ++ uint8_t GetHIDReportData(void); ++ ++ bool CALLBACK_HIDParser_FilterHIDReportItem(HID_ReportItem_t* const CurrentItem); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/LowLevel/MouseHostWithParser/MouseHostWithParser.c index 000000000,000000000..4ad4d580e new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MouseHostWithParser/MouseHostWithParser.c @@@ -1,0 -1,0 +1,289 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 MouseHostWithParser demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "MouseHostWithParser.h" ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ puts_P(PSTR(ESC_FG_CYAN "Mouse HID Parser Host Demo running.\r\n" ESC_FG_WHITE)); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ MouseHost_Task(); ++ ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#endif ++ ++ /* Hardware Initialization */ ++ Serial_Init(9600, false); ++ LEDs_Init(); ++ USB_Init(); ++ ++ /* Create a stdio stream for the serial port for stdin and stdout */ ++ Serial_CreateStream(NULL); ++} ++ ++/** Event handler for the USB_DeviceAttached event. This indicates that a device has been attached to the host, and ++ * starts the library USB task to begin the enumeration and USB management process. ++ */ ++void EVENT_USB_Host_DeviceAttached(void) ++{ ++ puts_P(PSTR(ESC_FG_GREEN "Device Attached.\r\n" ESC_FG_WHITE)); ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the USB_DeviceUnattached event. This indicates that a device has been removed from the host, and ++ * stops the library USB task management process. ++ */ ++void EVENT_USB_Host_DeviceUnattached(void) ++{ ++ puts_P(PSTR(ESC_FG_GREEN "Device Unattached.\r\n" ESC_FG_WHITE)); ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_DeviceEnumerationComplete event. This indicates that a device has been successfully ++ * enumerated by the host and is now ready to be used by the application. ++ */ ++void EVENT_USB_Host_DeviceEnumerationComplete(void) ++{ ++ puts_P(PSTR("Getting Config Data.\r\n")); ++ ++ uint8_t ErrorCode; ++ ++ /* Get and process the configuration descriptor data */ ++ if ((ErrorCode = ProcessConfigurationDescriptor()) != SuccessfulConfigRead) ++ { ++ if (ErrorCode == ControlError) ++ puts_P(PSTR(ESC_FG_RED "Control Error (Get Configuration).\r\n")); ++ else ++ puts_P(PSTR(ESC_FG_RED "Invalid Device.\r\n")); ++ ++ printf_P(PSTR(" -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ /* Set the device configuration to the first configuration (rarely do devices use multiple configurations) */ ++ if ((ErrorCode = USB_Host_SetDeviceConfiguration(1)) != HOST_SENDCONTROL_Successful) ++ { ++ printf_P(PSTR(ESC_FG_RED "Control Error (Set Configuration).\r\n" ++ " -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ printf_P(PSTR("Processing HID Report (Size %d Bytes).\r\n"), HIDReportSize); ++ ++ /* Get and process the device's first HID report descriptor */ ++ if ((ErrorCode = GetHIDReportData()) != ParseSuccessful) ++ { ++ puts_P(PSTR(ESC_FG_RED "Report Parse Error.\r\n")); ++ ++ if (!(HIDReportInfo.TotalReportItems)) ++ puts_P(PSTR("Not a valid Mouse." ESC_FG_WHITE)); ++ else ++ printf_P(PSTR(" -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ puts_P(PSTR("Mouse Enumerated.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++} ++ ++/** Event handler for the USB_HostError event. This indicates that a hardware error occurred while in host mode. */ ++void EVENT_USB_Host_HostError(const uint8_t ErrorCode) ++{ ++ USB_Disable(); ++ ++ printf_P(PSTR(ESC_FG_RED "Host Mode Error\r\n" ++ " -- Error Code %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ for(;;); ++} ++ ++/** Event handler for the USB_DeviceEnumerationFailed event. This indicates that a problem occurred while ++ * enumerating an attached USB device. ++ */ ++void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode) ++{ ++ printf_P(PSTR(ESC_FG_RED "Dev Enum Error\r\n" ++ " -- Error Code %d\r\n" ++ " -- Sub Error Code %d\r\n" ++ " -- In State %d\r\n" ESC_FG_WHITE), ErrorCode, SubErrorCode, USB_HostState); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++} ++ ++/** Task to read and process the HID report descriptor and HID reports from the device and display the ++ * results onto the board LEDs. ++ */ ++void MouseHost_Task(void) ++{ ++ if (USB_HostState != HOST_STATE_Configured) ++ return; ++ ++ /* Select and unfreeze mouse data pipe */ ++ Pipe_SelectPipe(MOUSE_DATA_IN_PIPE); ++ Pipe_Unfreeze(); ++ ++ /* Check to see if a packet has been received */ ++ if (Pipe_IsINReceived()) ++ { ++ /* Check if data has been received from the attached mouse */ ++ if (Pipe_IsReadWriteAllowed()) ++ { ++ /* Create buffer big enough for the report */ ++ uint8_t MouseReport[Pipe_BytesInPipe()]; ++ ++ /* Load in the mouse report */ ++ Pipe_Read_Stream_LE(MouseReport, Pipe_BytesInPipe(), NULL); ++ ++ /* Process the read in mouse report from the device */ ++ ProcessMouseReport(MouseReport); ++ } ++ ++ /* Clear the IN endpoint, ready for next data packet */ ++ Pipe_ClearIN(); ++ } ++ ++ /* Freeze mouse data pipe */ ++ Pipe_Freeze(); ++} ++ ++/** Processes a read HID report from an attached mouse, extracting out elements via the HID parser results ++ * as required and displays movement and button presses on the board LEDs. ++ * ++ * \param[in] MouseReport Pointer to a HID report from an attached mouse device ++ */ ++void ProcessMouseReport(uint8_t* MouseReport) ++{ ++ uint8_t LEDMask = LEDS_NO_LEDS; ++ ++ /* Check each HID report item in turn, looking for mouse X/Y/button reports */ ++ for (uint8_t ReportNumber = 0; ReportNumber < HIDReportInfo.TotalReportItems; ReportNumber++) ++ { ++ /* Create a temporary item pointer to the next report item */ ++ HID_ReportItem_t* ReportItem = &HIDReportInfo.ReportItems[ReportNumber]; ++ ++ bool FoundData; ++ ++ if ((ReportItem->Attributes.Usage.Page == USAGE_PAGE_BUTTON) && ++ (ReportItem->ItemType == HID_REPORT_ITEM_In)) ++ { ++ /* Get the mouse button value */ ++ FoundData = USB_GetHIDReportItemInfo(MouseReport, ReportItem); ++ ++ /* For multi-report devices - if the requested data was not in the issued report, continue */ ++ if (!(FoundData)) ++ continue; ++ ++ /* If button is pressed, all LEDs are turned on */ ++ if (ReportItem->Value) ++ LEDMask = LEDS_ALL_LEDS; ++ } ++ else if ((ReportItem->Attributes.Usage.Page == USAGE_PAGE_GENERIC_DCTRL) && ++ (ReportItem->Attributes.Usage.Usage == USAGE_SCROLL_WHEEL) && ++ (ReportItem->ItemType == HID_REPORT_ITEM_In)) ++ { ++ /* Get the mouse wheel value if it is contained within the current ++ * report, if not, skip to the next item in the parser list ++ */ ++ if (!(USB_GetHIDReportItemInfo(MouseReport, ReportItem))) ++ continue; ++ ++ int16_t WheelDelta = HID_ALIGN_DATA(ReportItem, int16_t); ++ ++ if (WheelDelta) ++ LEDMask = (LEDS_LED1 | LEDS_LED2 | ((WheelDelta > 0) ? LEDS_LED3 : LEDS_LED4)); ++ } ++ else if ((ReportItem->Attributes.Usage.Page == USAGE_PAGE_GENERIC_DCTRL) && ++ ((ReportItem->Attributes.Usage.Usage == USAGE_X) || ++ (ReportItem->Attributes.Usage.Usage == USAGE_Y)) && ++ (ReportItem->ItemType == HID_REPORT_ITEM_In)) ++ { ++ /* Get the mouse relative position value */ ++ FoundData = USB_GetHIDReportItemInfo(MouseReport, ReportItem); ++ ++ /* For multi-report devices - if the requested data was not in the issued report, continue */ ++ if (!(FoundData)) ++ continue; ++ ++ int16_t DeltaMovement = HID_ALIGN_DATA(ReportItem, int16_t); ++ ++ /* Check to see if a (non-zero) delta movement has been indicated */ ++ if (DeltaMovement) ++ { ++ /* Determine if the report is for the X or Y delta movement, light LEDs as appropriate */ ++ if (ReportItem->Attributes.Usage.Usage == USAGE_X) ++ LEDMask |= ((DeltaMovement > 0) ? LEDS_LED1 : LEDS_LED2); ++ else ++ LEDMask |= ((DeltaMovement > 0) ? LEDS_LED3 : LEDS_LED4); ++ } ++ } ++ } ++ ++ /* Display the button information on the board LEDs */ ++ LEDs_SetAllLEDs(LEDMask); ++} ++ diff --cc lib/lufa/Demos/Host/LowLevel/MouseHostWithParser/MouseHostWithParser.h index 000000000,000000000..8812cacbe new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MouseHostWithParser/MouseHostWithParser.h @@@ -1,0 -1,0 +1,83 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 MouseHostWithParser.c. ++ */ ++ ++#ifndef _MOUSE_HOST_H_ ++#define _MOUSE_HOST_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/pgmspace.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <stdio.h> ++ ++ #include <LUFA/Drivers/Misc/TerminalCodes.h> ++ #include <LUFA/Drivers/Peripheral/Serial.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Platform/Platform.h> ++ ++ #include "ConfigDescriptor.h" ++ #include "HIDReport.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 MouseHost_Task(void); ++ ++ void EVENT_USB_Host_HostError(const uint8_t ErrorCode); ++ void EVENT_USB_Host_DeviceAttached(void); ++ void EVENT_USB_Host_DeviceUnattached(void); ++ void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode); ++ void EVENT_USB_Host_DeviceEnumerationComplete(void); ++ ++ void ProcessMouseReport(uint8_t* MouseReport); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/LowLevel/MouseHostWithParser/MouseHostWithParser.txt index 000000000,000000000..9b1b7d055 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MouseHostWithParser/MouseHostWithParser.txt @@@ -1,0 -1,0 +1,71 @@@ ++/** \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 Mouse Host With HID Descriptor Parser Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * ++ * \section Sec_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>Host</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Class:</b></td> ++ * <td>Human Interface Device (HID)</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>N/A</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF HID Specification \n ++ * USBIF HID Usage Tables</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Low Speed Mode \n ++ * Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Mouse host demonstration application. This gives a simple reference ++ * application for implementing a USB Mouse host, for USB mice using ++ * the standard mouse HID profile. It uses a HID parser for the HID ++ * reports, allowing for correct operation across all USB mice. This ++ * demo supports mice with a single HID report. ++ * ++ * Mouse and scroll wheel movement and button presses are displayed ++ * on the board LEDs. On connection to a USB mouse, the report items ++ * will be processed and printed as a formatted list through the USART ++ * before the mouse is fully enumerated. ++ * ++ * Currently only single interface mice are supported. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Host/LowLevel/MouseHostWithParser/asf.xml index 000000000,000000000..e06dbea4a new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MouseHostWithParser/asf.xml @@@ -1,0 -1,0 +1,52 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Mouse HID (with parser) Host Demo (Low Level APIs)" id="lufa.demos.host.lowlevel.mouse_parser.example.avr8"> ++ <require idref="lufa.demos.host.lowlevel.mouse_parser"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.host.lowlevel.mouse_parser" caption="Mouse HID (with parser) Host Demo (Low Level APIs)"> ++ <info type="description" value="summary"> ++ Mouse HID Host demo with HID parser, implementing a basic USB mouse host that can display movement data on the board LEDs. This demo uses the Low Level LUFA APIs to manually implement a USB Class for demonstration purposes without using the simpler in-built LUFA Class Driver APIs. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Low Level APIs"/> ++ <keyword value="USB Host"/> ++ <keyword value="HID Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="MouseHostWithParser.txt"/> ++ ++ <build type="c-source" value="MouseHostWithParser.c"/> ++ <build type="c-source" value="ConfigDescriptor.c"/> ++ <build type="c-source" value="HIDReport.c"/> ++ <build type="header-file" value="MouseHostWithParser.h"/> ++ <build type="header-file" value="ConfigDescriptor.h"/> ++ <build type="header-file" value="HIDReport.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.peripheral.usart"/> ++ <require idref="lufa.drivers.misc.ansi"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Host/LowLevel/MouseHostWithParser/doxyfile index 000000000,000000000..f12fda279 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MouseHostWithParser/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Mouse Host Demo (Using HID Descriptor Parser)" ++ ++# 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Host/LowLevel/MouseHostWithParser/makefile index 000000000,000000000..df0fc00fc new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/MouseHostWithParser/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = MouseHostWithParser ++SRC = $(TARGET).c ConfigDescriptor.c HIDReport.c $(LUFA_SRC_USB) $(LUFA_SRC_SERIAL) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Host/LowLevel/PrinterHost/Config/LUFAConfig.h index 000000000,000000000..197122fce new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/PrinterHost/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++// #define USB_DEVICE_ONLY ++ #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++// #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++// #define FIXED_CONTROL_ENDPOINT_SIZE {Insert Value Here} ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++// #define FIXED_NUM_CONFIGURATIONS {Insert Value Here} ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Host/LowLevel/PrinterHost/ConfigDescriptor.c index 000000000,000000000..6e92b1760 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/PrinterHost/ConfigDescriptor.c @@@ -1,0 -1,0 +1,177 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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. ++*/ ++ ++#include "ConfigDescriptor.h" ++ ++/** Interface number for the bidirectional Printer interface found within the device. */ ++uint8_t PrinterInterfaceNumber; ++ ++/** Interface Alternate Setting number for the bidirectional Printer interface found within the device. */ ++uint8_t PrinterAltSetting; ++ ++/** Reads and processes an attached device's descriptors, to determine compatibility and pipe configurations. This ++ * routine will read in the entire configuration descriptor, and configure the hosts pipes to correctly communicate ++ * with compatible devices. ++ * ++ * This routine searches for a bidirectional Printer interface descriptor containing bulk IN and OUT data endpoints. ++ * ++ * \return An error code from the \ref PrinterHost_GetConfigDescriptorDataCodes_t enum. ++ */ ++uint8_t ProcessConfigurationDescriptor(void) ++{ ++ uint8_t ConfigDescriptorData[512]; ++ void* CurrConfigLocation = ConfigDescriptorData; ++ uint16_t CurrConfigBytesRem; ++ ++ USB_Descriptor_Interface_t* PrinterInterface = NULL; ++ USB_Descriptor_Endpoint_t* DataINEndpoint = NULL; ++ USB_Descriptor_Endpoint_t* DataOUTEndpoint = NULL; ++ ++ /* Retrieve the entire configuration descriptor into the allocated buffer */ ++ switch (USB_Host_GetDeviceConfigDescriptor(1, &CurrConfigBytesRem, ConfigDescriptorData, sizeof(ConfigDescriptorData))) ++ { ++ case HOST_GETCONFIG_Successful: ++ break; ++ case HOST_GETCONFIG_InvalidData: ++ return InvalidConfigDataReturned; ++ case HOST_GETCONFIG_BuffOverflow: ++ return DescriptorTooLarge; ++ default: ++ return ControlError; ++ } ++ ++ while (!(DataINEndpoint) || !(DataOUTEndpoint)) ++ { ++ /* See if we've found a likely compatible interface, and if there is an endpoint within that interface */ ++ if (!(PrinterInterface) || ++ USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, ++ DComp_NextPrinterInterfaceBulkDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found) ++ { ++ /* Get the next Printer interface from the configuration descriptor */ ++ if (USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, ++ DComp_NextBidirectionalPrinterInterface) != DESCRIPTOR_SEARCH_COMP_Found) ++ { ++ /* Descriptor not found, error out */ ++ return NoCompatibleInterfaceFound; ++ } ++ ++ /* Save the interface in case we need to refer back to it later */ ++ PrinterInterface = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Interface_t); ++ ++ /* Clear any found endpoints */ ++ DataINEndpoint = NULL; ++ DataOUTEndpoint = NULL; ++ ++ /* Skip the remainder of the loop as we have not found an endpoint yet */ ++ continue; ++ } ++ ++ /* Retrieve the endpoint address from the endpoint descriptor */ ++ USB_Descriptor_Endpoint_t* EndpointData = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Endpoint_t); ++ ++ /* If the endpoint is a IN type endpoint */ ++ if ((EndpointData->EndpointAddress & ENDPOINT_DIR_MASK) == ENDPOINT_DIR_IN) ++ DataINEndpoint = EndpointData; ++ else ++ DataOUTEndpoint = EndpointData; ++ } ++ ++ /* Save Printer interface details for later use */ ++ PrinterInterfaceNumber = PrinterInterface->InterfaceNumber; ++ PrinterAltSetting = PrinterInterface->AlternateSetting; ++ ++ /* Configure the Printer data IN pipe */ ++ Pipe_ConfigurePipe(PRINTER_DATA_IN_PIPE, EP_TYPE_BULK, DataINEndpoint->EndpointAddress, DataINEndpoint->EndpointSize, 1); ++ ++ /* Configure the Printer data OUT pipe */ ++ Pipe_ConfigurePipe(PRINTER_DATA_OUT_PIPE, EP_TYPE_BULK, DataOUTEndpoint->EndpointAddress, DataOUTEndpoint->EndpointSize, 1); ++ ++ /* Valid data found, return success */ ++ return SuccessfulConfigRead; ++} ++ ++/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's ++ * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration ++ * descriptor processing if an incompatible descriptor configuration is found. ++ * ++ * This comparator searches for the next Bidirectional Printer Interface descriptor of the current Printer interface, ++ * aborting the search if the end of the descriptors is found. ++ * ++ * \return A value from the DSEARCH_Return_ErrorCodes_t enum ++ */ ++uint8_t DComp_NextBidirectionalPrinterInterface(void* CurrentDescriptor) ++{ ++ USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t); ++ ++ if (Header->Type == DTYPE_Interface) ++ { ++ USB_Descriptor_Interface_t* Interface = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Interface_t); ++ ++ /* Check the descriptor class, subclass and protocol, break out if correct value interface found */ ++ if ((Interface->Class == PRNT_CSCP_PrinterClass) && ++ (Interface->SubClass == PRNT_CSCP_PrinterSubclass) && ++ (Interface->Protocol == PRNT_CSCP_BidirectionalProtocol)) ++ { ++ return DESCRIPTOR_SEARCH_Found; ++ } ++ } ++ ++ return DESCRIPTOR_SEARCH_NotFound; ++} ++ ++/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's ++ * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration ++ * descriptor processing if an incompatible descriptor configuration is found. ++ * ++ * This comparator searches for the next Bulk Endpoint descriptor of the current Printer interface, aborting the ++ * search if another interface descriptor is found before the next endpoint. ++ * ++ * \return A value from the DSEARCH_Return_ErrorCodes_t enum ++ */ ++uint8_t DComp_NextPrinterInterfaceBulkDataEndpoint(void* CurrentDescriptor) ++{ ++ USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t); ++ ++ if (Header->Type == DTYPE_Endpoint) ++ { ++ USB_Descriptor_Endpoint_t* Endpoint = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Endpoint_t); ++ ++ /* Check the endpoint type, break out if correct BULK type endpoint found */ ++ if ((Endpoint->Attributes & EP_TYPE_MASK) == EP_TYPE_BULK) ++ return DESCRIPTOR_SEARCH_Found; ++ } ++ else if (Header->Type == DTYPE_Interface) ++ { ++ return DESCRIPTOR_SEARCH_Fail; ++ } ++ ++ return DESCRIPTOR_SEARCH_NotFound; ++} ++ diff --cc lib/lufa/Demos/Host/LowLevel/PrinterHost/ConfigDescriptor.h index 000000000,000000000..34c778598 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/PrinterHost/ConfigDescriptor.h @@@ -1,0 -1,0 +1,76 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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. ++*/ ++ ++#ifndef _CONFIGDESCRIPTOR_H_ ++#define _CONFIGDESCRIPTOR_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include "PrinterHost.h" ++ #include "Lib/PrinterCommands.h" ++ ++ /* Macros: */ ++ /** Pipe address of the Printer data IN pipe. */ ++ #define PRINTER_DATA_IN_PIPE (PIPE_DIR_IN | 1) ++ ++ /** Pipe address of the Printer data OUT pipe. */ ++ #define PRINTER_DATA_OUT_PIPE (PIPE_DIR_OUT | 2) ++ ++ /* Enums: */ ++ /** Enum for the possible return codes of the \ref ProcessConfigurationDescriptor() function. */ ++ enum PrinterHost_GetConfigDescriptorDataCodes_t ++ { ++ SuccessfulConfigRead = 0, /**< Configuration Descriptor was processed successfully */ ++ ControlError = 1, /**< A control request to the device failed to complete successfully */ ++ DescriptorTooLarge = 2, /**< The device's Configuration Descriptor is too large to process */ ++ InvalidConfigDataReturned = 3, /**< The device returned an invalid Configuration Descriptor */ ++ NoCompatibleInterfaceFound = 4, /**< A compatible interface with the required endpoints was not found */ ++ }; ++ ++ /* External Variables: */ ++ /** Interface index of the Bidirectional Printer interface within the device, once the Configuration ++ * Descriptor has been processed. ++ */ ++ extern uint8_t PrinterInterfaceNumber; ++ ++ /** Interface Alternate Setting index of the Bidirectional Printer interface within the device, once ++ * the Configuration Descriptor has been processed. ++ */ ++ extern uint8_t PrinterAltSetting; ++ ++ /* Function Prototypes: */ ++ uint8_t ProcessConfigurationDescriptor(void); ++ ++ uint8_t DComp_NextBidirectionalPrinterInterface(void* CurrentDescriptor); ++ uint8_t DComp_NextPrinterInterfaceBulkDataEndpoint(void* CurrentDescriptor); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/LowLevel/PrinterHost/Lib/PrinterCommands.c index 000000000,000000000..750789125 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/PrinterHost/Lib/PrinterCommands.c @@@ -1,0 -1,0 +1,162 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * Printer Device commands, to send/receive data to and from an attached USB ++ * printer, and to send and receive Printer Class control requests. ++ */ ++ ++#include "PrinterCommands.h" ++ ++/** Sends the given data directly to the printer via the data endpoints, for the sending of print commands in printer ++ * languages accepted by the attached printer (e.g. PCL). ++ * ++ * \param[in] PrinterCommands Pointer to the data to send to the attached printer ++ * \param[in] CommandSize Size of the data to send to the attached printer ++ * ++ * \return A value from the Pipe_Stream_RW_ErrorCodes_t enum ++ */ ++uint8_t Printer_SendData(const void* const PrinterCommands, ++ const uint16_t CommandSize) ++{ ++ uint8_t ErrorCode; ++ ++ Pipe_SelectPipe(PRINTER_DATA_OUT_PIPE); ++ Pipe_Unfreeze(); ++ ++ if ((ErrorCode = Pipe_Write_Stream_LE(PrinterCommands, CommandSize, NULL)) != PIPE_RWSTREAM_NoError) ++ return ErrorCode; ++ ++ Pipe_ClearOUT(); ++ ++ Pipe_WaitUntilReady(); ++ ++ Pipe_Freeze(); ++ ++ return PIPE_RWSTREAM_NoError; ++} ++ ++/** Issues a Printer class Get Device ID command to the attached device, to retrieve the device ID string (which indicates ++ * the accepted printer languages, the printer's model and other pertinent information). ++ * ++ * \param[out] DeviceIDString Pointer to the destination where the returned string should be stored ++ * \param[in] BufferSize Size in bytes of the allocated buffer for the returned Device ID string ++ * ++ * \return A value from the USB_Host_SendControlErrorCodes_t enum ++ */ ++uint8_t Printer_GetDeviceID(char* DeviceIDString, ++ const uint16_t BufferSize) ++{ ++ uint8_t ErrorCode; ++ uint16_t DeviceIDStringLength = 0; ++ ++ USB_ControlRequest = (USB_Request_Header_t) ++ { ++ .bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE), ++ .bRequest = PRNT_REQ_GetDeviceID, ++ .wValue = 0, ++ .wIndex = PrinterInterfaceNumber, ++ .wLength = sizeof(DeviceIDStringLength), ++ }; ++ ++ Pipe_SelectPipe(PIPE_CONTROLPIPE); ++ ++ if ((ErrorCode = USB_Host_SendControlRequest(&DeviceIDStringLength)) != HOST_SENDCONTROL_Successful) ++ return ErrorCode; ++ ++ if (!(DeviceIDStringLength)) ++ { ++ DeviceIDString[0] = 0x00; ++ return HOST_SENDCONTROL_Successful; ++ } ++ ++ DeviceIDStringLength = SwapEndian_16(DeviceIDStringLength); ++ ++ if (DeviceIDStringLength > BufferSize) ++ DeviceIDStringLength = BufferSize; ++ ++ USB_ControlRequest.wLength = DeviceIDStringLength; ++ ++ if ((ErrorCode = USB_Host_SendControlRequest(DeviceIDString)) != HOST_SENDCONTROL_Successful) ++ return ErrorCode; ++ ++ /* Move string back two characters to remove the string length value from the start of the array */ ++ memmove(&DeviceIDString[0], &DeviceIDString[2], DeviceIDStringLength - 2); ++ ++ DeviceIDString[DeviceIDStringLength - 2] = 0x00; ++ ++ return HOST_SENDCONTROL_Successful; ++} ++ ++/** Issues a Printer class Get Port Status command to the attached device, to retrieve the current status flags of the ++ * printer. ++ * ++ * \param[out] PortStatus Pointer to the destination where the printer's status flag values should be stored ++ * ++ * \return A value from the USB_Host_SendControlErrorCodes_t enum ++ */ ++uint8_t Printer_GetPortStatus(uint8_t* const PortStatus) ++{ ++ USB_ControlRequest = (USB_Request_Header_t) ++ { ++ .bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE), ++ .bRequest = PRNT_REQ_GetPortStatus, ++ .wValue = 0, ++ .wIndex = PrinterInterfaceNumber, ++ .wLength = sizeof(uint8_t), ++ }; ++ ++ Pipe_SelectPipe(PIPE_CONTROLPIPE); ++ ++ return USB_Host_SendControlRequest(PortStatus); ++} ++ ++/** Issues a Printer class Soft Reset command to the attached device, to reset the printer ready for new input without ++ * physically cycling the printer's power. ++ * ++ * \return A value from the USB_Host_SendControlErrorCodes_t enum ++ */ ++uint8_t Printer_SoftReset(void) ++{ ++ USB_ControlRequest = (USB_Request_Header_t) ++ { ++ .bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE), ++ .bRequest = PRNT_REQ_SoftReset, ++ .wValue = 0, ++ .wIndex = PrinterInterfaceNumber, ++ .wLength = 0, ++ }; ++ ++ Pipe_SelectPipe(PIPE_CONTROLPIPE); ++ ++ return USB_Host_SendControlRequest(NULL); ++} ++ diff --cc lib/lufa/Demos/Host/LowLevel/PrinterHost/Lib/PrinterCommands.h index 000000000,000000000..f29b18e45 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/PrinterHost/Lib/PrinterCommands.h @@@ -1,0 -1,0 +1,56 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 PrinterCommands.c. ++ */ ++ ++#ifndef _PRINTER_COMMANDS_H_ ++#define _PRINTER_COMMANDS_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <string.h> ++ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include "../PrinterHost.h" ++ ++ /* Function Prototypes: */ ++ uint8_t Printer_SendData(const void* const PrinterCommands, ++ const uint16_t CommandSize); ++ uint8_t Printer_GetDeviceID(char* DeviceIDString, ++ const uint16_t BufferSize); ++ uint8_t Printer_GetPortStatus(uint8_t* const PortStatus); ++ uint8_t Printer_SoftReset(void); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/LowLevel/PrinterHost/PrinterHost.c index 000000000,000000000..44e8f1274 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/PrinterHost/PrinterHost.c @@@ -1,0 -1,0 +1,226 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 PrinterHost demo. This file contains the main tasks of ++ * the demo and is responsible for the initial application hardware configuration. ++ */ ++ ++#include "PrinterHost.h" ++ ++/** Main program entry point. This routine configures the hardware required by the application, then ++ * enters a loop to run the application tasks in sequence. ++ */ ++int main(void) ++{ ++ SetupHardware(); ++ ++ puts_P(PSTR(ESC_FG_CYAN "Printer Host Demo running.\r\n" ESC_FG_WHITE)); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++ GlobalInterruptEnable(); ++ ++ for (;;) ++ { ++ PrinterHost_Task(); ++ ++ USB_USBTask(); ++ } ++} ++ ++/** Configures the board hardware and chip peripherals for the demo's functionality. */ ++void SetupHardware(void) ++{ ++#if (ARCH == ARCH_AVR8) ++ /* Disable watchdog if enabled by bootloader/fuses */ ++ MCUSR &= ~(1 << WDRF); ++ wdt_disable(); ++ ++ /* Disable clock division */ ++ clock_prescale_set(clock_div_1); ++#endif ++ ++ /* Hardware Initialization */ ++ Serial_Init(9600, false); ++ LEDs_Init(); ++ USB_Init(); ++ ++ /* Create a stdio stream for the serial port for stdin and stdout */ ++ Serial_CreateStream(NULL); ++} ++ ++/** Event handler for the USB_DeviceAttached event. This indicates that a device has been attached to the host, and ++ * starts the library USB task to begin the enumeration and USB management process. ++ */ ++void EVENT_USB_Host_DeviceAttached(void) ++{ ++ puts_P(PSTR(ESC_FG_GREEN "Device Attached.\r\n" ESC_FG_WHITE)); ++ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); ++} ++ ++/** Event handler for the USB_DeviceUnattached event. This indicates that a device has been removed from the host, and ++ * stops the library USB task management process. ++ */ ++void EVENT_USB_Host_DeviceUnattached(void) ++{ ++ puts_P(PSTR(ESC_FG_GREEN "\r\nDevice Unattached.\r\n" ESC_FG_WHITE)); ++ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); ++} ++ ++/** Event handler for the USB_DeviceEnumerationComplete event. This indicates that a device has been successfully ++ * enumerated by the host and is now ready to be used by the application. ++ */ ++void EVENT_USB_Host_DeviceEnumerationComplete(void) ++{ ++ puts_P(PSTR("Getting Config Data.\r\n")); ++ ++ uint8_t ErrorCode; ++ ++ /* Get and process the configuration descriptor data */ ++ if ((ErrorCode = ProcessConfigurationDescriptor()) != SuccessfulConfigRead) ++ { ++ if (ErrorCode == ControlError) ++ puts_P(PSTR(ESC_FG_RED "Control Error (Get Configuration).\r\n")); ++ else ++ puts_P(PSTR(ESC_FG_RED "Invalid Device.\r\n")); ++ ++ printf_P(PSTR(" -- Error Code: %d\r\n"), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ /* Set the device configuration to the first configuration (rarely do devices use multiple configurations) */ ++ if ((ErrorCode = USB_Host_SetDeviceConfiguration(1)) != HOST_SENDCONTROL_Successful) ++ { ++ printf_P(PSTR(ESC_FG_RED "Control Error (Set Configuration).\r\n" ++ " -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ return; ++ } ++ ++ /* Some printers use alternate settings to determine the communication protocol used - if so, send a SetInterface ++ * request to switch to the interface alternate setting with the Bidirectional protocol */ ++ if (PrinterAltSetting) ++ { ++ if ((ErrorCode = USB_Host_SetInterfaceAltSetting(PrinterInterfaceNumber, PrinterAltSetting)) != HOST_SENDCONTROL_Successful) ++ { ++ printf_P(PSTR(ESC_FG_RED "Control Error (Set Interface).\r\n" ++ " -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ } ++ ++ puts_P(PSTR("Retrieving Device ID...\r\n")); ++ ++ char DeviceIDString[300]; ++ if ((ErrorCode = Printer_GetDeviceID(DeviceIDString, sizeof(DeviceIDString))) != HOST_SENDCONTROL_Successful) ++ { ++ printf_P(PSTR(ESC_FG_RED "Control Error (Get Device ID).\r\n" ++ " -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ printf_P(PSTR("Printer Device ID: %s\r\n"), DeviceIDString); ++ ++ puts_P(PSTR("Printer Enumerated.\r\n")); ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++} ++ ++/** Event handler for the USB_HostError event. This indicates that a hardware error occurred while in host mode. */ ++void EVENT_USB_Host_HostError(const uint8_t ErrorCode) ++{ ++ USB_Disable(); ++ ++ printf_P(PSTR(ESC_FG_RED "Host Mode Error\r\n" ++ " -- Error Code %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ for(;;); ++} ++ ++/** Event handler for the USB_DeviceEnumerationFailed event. This indicates that a problem occurred while ++ * enumerating an attached USB device. ++ */ ++void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode) ++{ ++ printf_P(PSTR(ESC_FG_RED "Dev Enum Error\r\n" ++ " -- Error Code %d\r\n" ++ " -- Sub Error Code %d\r\n" ++ " -- In State %d\r\n" ESC_FG_WHITE), ErrorCode, SubErrorCode, USB_HostState); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++} ++ ++/** Task to manage an enumerated USB printer once connected, to display device ++ * information and print a test PCL page. ++ */ ++void PrinterHost_Task(void) ++{ ++ if (USB_HostState != HOST_STATE_Configured) ++ return; ++ ++ uint8_t ErrorCode; ++ ++ /* Indicate device busy via the status LEDs */ ++ LEDs_SetAllLEDs(LEDMASK_USB_BUSY); ++ ++ char TestPageData[] = "\033%-12345X\033E" "LUFA PCL Test Page" "\033E\033%-12345X"; ++ uint16_t TestPageLength = strlen(TestPageData); ++ ++ printf_P(PSTR("Sending Test Page (%d bytes)...\r\n"), TestPageLength); ++ ++ /* Send the test page to the attached printer */ ++ if ((ErrorCode = Printer_SendData(&TestPageData, TestPageLength)) != PIPE_RWSTREAM_NoError) ++ { ++ printf_P(PSTR(ESC_FG_RED "Error Sending Test Page.\r\n" ++ " -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); ++ ++ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); ++ USB_Host_SetDeviceConfiguration(0); ++ return; ++ } ++ ++ puts_P(PSTR("Test Page Sent.\r\n")); ++ ++ /* Indicate device no longer busy */ ++ LEDs_SetAllLEDs(LEDMASK_USB_READY); ++ USB_Host_SetDeviceConfiguration(0); ++} ++ diff --cc lib/lufa/Demos/Host/LowLevel/PrinterHost/PrinterHost.h index 000000000,000000000..c1daa6247 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/PrinterHost/PrinterHost.h @@@ -1,0 -1,0 +1,88 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 PrinterHost.c. ++ */ ++ ++#ifndef _MASS_STORE_HOST_H_ ++#define _MASS_STORE_HOST_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <avr/wdt.h> ++ #include <avr/pgmspace.h> ++ #include <avr/power.h> ++ #include <avr/interrupt.h> ++ #include <stdio.h> ++ #include <string.h> ++ ++ #include "ConfigDescriptor.h" ++ #include "Lib/PrinterCommands.h" ++ ++ #include <LUFA/Drivers/Misc/TerminalCodes.h> ++ #include <LUFA/Drivers/USB/USB.h> ++ #include <LUFA/Drivers/Peripheral/Serial.h> ++ #include <LUFA/Drivers/Board/LEDs.h> ++ #include <LUFA/Platform/Platform.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) ++ ++ /** LED mask for the library LED driver, to indicate that the USB interface is busy. */ ++ #define LEDMASK_USB_BUSY LEDS_LED2 ++ ++ /* External Variables: */ ++ extern uint8_t PrinterInterfaceNumber; ++ ++ /* Function Prototypes: */ ++ void SetupHardware(void); ++ void PrinterHost_Task(void); ++ ++ void EVENT_USB_Host_DeviceAttached(void); ++ void EVENT_USB_Host_DeviceUnattached(void); ++ void EVENT_USB_Host_DeviceEnumerationComplete(void); ++ void EVENT_USB_Host_HostError(const uint8_t ErrorCode); ++ void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, ++ const uint8_t SubErrorCode); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/LowLevel/PrinterHost/PrinterHost.txt index 000000000,000000000..e2a482058 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/PrinterHost/PrinterHost.txt @@@ -1,0 -1,0 +1,66 @@@ ++/** \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 Printer Host Demo ++ * ++ * \section Sec_Compat Demo Compatibility: ++ * ++ * The following list indicates what microcontrollers are compatible with this demo. ++ * ++ * \li Series 7 USB AVRs (AT90USBxxx7) ++ * ++ * \section Sec_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>Host</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Class:</b></td> ++ * <td>Printer Device</td> ++ * </tr> ++ * <tr> ++ * <td><b>USB Subclass:</b></td> ++ * <td>Bidirectional Protocol</td> ++ * </tr> ++ * <tr> ++ * <td><b>Relevant Standards:</b></td> ++ * <td>USBIF Printer Class Specification \n ++ * PCL Language Specification</td> ++ * </tr> ++ * <tr> ++ * <td><b>Supported USB Speeds:</b></td> ++ * <td>Low Speed Mode \n ++ * Full Speed Mode</td> ++ * </tr> ++ * </table> ++ * ++ * \section Sec_Description Project Description: ++ * ++ * Printer host demonstration application. This gives a simple reference ++ * application for implementing a USB Printer host, for USB printers using ++ * the bidirectional data encapsulation protocol and PCL language. ++ * ++ * Upon connection of a compatible printer, the printer's device ID is sent ++ * to the AVR's serial port, and a simple test page is printed using the PCL ++ * printer language. ++ * ++ * \section Sec_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> ++ */ ++ diff --cc lib/lufa/Demos/Host/LowLevel/PrinterHost/asf.xml index 000000000,000000000..7f8606360 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/PrinterHost/asf.xml @@@ -1,0 -1,0 +1,53 @@@ ++<asf xmlversion="1.0"> ++ <project caption="Printer Host Demo (Low Level APIs)" id="lufa.demos.host.lowlevel.printer.example.avr8"> ++ <require idref="lufa.demos.host.lowlevel.printer"/> ++ <require idref="lufa.boards.dummy.avr8"/> ++ <generator value="as5_8"/> ++ ++ <device-support value="at90usb1287"/> ++ <config name="lufa.drivers.board.name" value="none"/> ++ ++ <build type="define" name="F_CPU" value="16000000UL"/> ++ <build type="define" name="F_USB" value="16000000UL"/> ++ </project> ++ ++ <module type="application" id="lufa.demos.host.lowlevel.printer" caption="Printer Host Demo (Low Level APIs)"> ++ <info type="description" value="summary"> ++ Printer Host demo, implementing a basic USB printer host that can send raw printer control data to an attached device. This demo uses the Low Level LUFA APIs to manually implement a USB Class for demonstration purposes without using the simpler in-built LUFA Class Driver APIs. ++ </info> ++ ++ <info type="gui-flag" value="move-to-root"/> ++ ++ <info type="keyword" value="Technology"> ++ <keyword value="Low Level APIs"/> ++ <keyword value="USB Host"/> ++ <keyword value="Printer Class"/> ++ </info> ++ ++ <device-support-alias value="lufa_avr8"/> ++ <device-support-alias value="lufa_xmega"/> ++ <device-support-alias value="lufa_uc3"/> ++ ++ <build type="distribute" subtype="user-file" value="doxyfile"/> ++ <build type="distribute" subtype="user-file" value="PrinterHost.txt"/> ++ ++ <build type="c-source" value="PrinterHost.c"/> ++ <build type="c-source" value="ConfigDescriptor.c"/> ++ <build type="header-file" value="PrinterHost.h"/> ++ <build type="header-file" value="ConfigDescriptor.h"/> ++ ++ <build type="c-source" value="Lib/PrinterCommands.c"/> ++ <build type="header-file" value="Lib/PrinterCommands.h"/> ++ ++ <build type="module-config" subtype="path" value="Config"/> ++ <build type="header-file" value="Config/LUFAConfig.h"/> ++ ++ <require idref="lufa.common"/> ++ <require idref="lufa.platform"/> ++ <require idref="lufa.drivers.usb"/> ++ <require idref="lufa.drivers.peripheral.usart"/> ++ <require idref="lufa.drivers.misc.ansi"/> ++ <require idref="lufa.drivers.board"/> ++ <require idref="lufa.drivers.board.leds"/> ++ </module> ++</asf> diff --cc lib/lufa/Demos/Host/LowLevel/PrinterHost/doxyfile index 000000000,000000000..3fcf03b2b new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/PrinterHost/doxyfile @@@ -1,0 -1,0 +1,2395 @@@ ++# Doxyfile 1.8.9 ++ ++# This file describes the settings to be used by the documentation system ++# doxygen (www.doxygen.org) for a project. ++# ++# All text after a double hash (##) is considered a comment and is placed in ++# front of the TAG it is preceding. ++# ++# All text after a single 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. ++# The default value is: UTF-8. ++ ++DOXYFILE_ENCODING = UTF-8 ++ ++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by ++# double-quotes, unless you are using Doxywizard) that should identify the ++# project for which the documentation is generated. This name is used in the ++# title of most generated pages and in a few other places. ++# The default value is: My Project. ++ ++PROJECT_NAME = "LUFA Library - Printer Host 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 = ++ ++# Using the PROJECT_BRIEF tag one can provide an optional one line description ++# for a project that appears at the top of each page and should give viewer a ++# quick idea about the purpose of the project. Keep the description short. ++ ++PROJECT_BRIEF = ++ ++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included ++# in the documentation. The maximum height of the logo should not exceed 55 ++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy ++# the logo to the output directory. ++ ++PROJECT_LOGO = ++ ++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path ++# into which the generated documentation will be written. 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 causes ++# performance problems for the file system. ++# The default value is: NO. ++ ++CREATE_SUBDIRS = NO ++ ++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII ++# characters to appear in the names of generated files. If set to NO, non-ASCII ++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode ++# U+3044. ++# The default value is: NO. ++ ++ALLOW_UNICODE_NAMES = 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. ++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, ++# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), ++# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, ++# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), ++# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, ++# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, ++# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, ++# Ukrainian and Vietnamese. ++# The default value is: English. ++ ++OUTPUT_LANGUAGE = English ++ ++# If the BRIEF_MEMBER_DESC tag is set to YES, 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. ++# The default value is: YES. ++ ++BRIEF_MEMBER_DESC = YES ++ ++# If the REPEAT_BRIEF tag is set to YES, 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. ++# The default value is: YES. ++ ++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 and 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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++INLINE_INHERITED_MEMB = NO ++ ++# If the FULL_PATH_NAMES tag is set to YES, 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 ++# The default value is: YES. ++ ++FULL_PATH_NAMES = YES ++ ++# 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. ++# ++# Note that you can specify absolute paths here, but also relative paths, which ++# will be relative from the directory where doxygen is started. ++# This tag requires that the tag FULL_PATH_NAMES is set to YES. ++ ++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 list of 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. ++# The default value is: NO. ++ ++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-style will behave just like regular Qt- ++# style comments (thus requiring an explicit @brief command for a brief ++# description.) ++# The default value is: NO. ++ ++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 Qt-style will behave just like regular Qt-style comments (thus ++# requiring an explicit \brief command for a brief description.) ++# The default value is: NO. ++ ++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 behavior. 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 behavior instead. ++# ++# Note that setting this tag to YES also means that rational rose comments are ++# not recognized any more. ++# The default value is: NO. ++ ++MULTILINE_CPP_IS_BRIEF = NO ++ ++# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the ++# documentation from any documented member that it re-implements. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# Minimum value: 1, maximum value: 16, default value: 4. ++ ++TAB_SIZE = 4 ++ ++# This tag can be used to specify a number of aliases that act 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 = ++ ++# This tag can be used to specify a number of word-keyword mappings (TCL only). ++# A mapping has the form "name=value". For example adding "class=itcl::class" ++# will allow you to use the command class in the itcl::class meaning. ++ ++TCL_SUBST = ++ ++# 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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_FOR_C = YES ++ ++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or ++# Python sources only. Doxygen will then generate output that is more tailored ++# for that language. For instance, namespaces will be presented as packages, ++# qualified scopes will look different, etc. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_JAVA = NO ++ ++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran ++# sources. Doxygen will then generate output that is tailored for Fortran. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++OPTIMIZE_OUTPUT_VHDL = NO ++ ++# Doxygen selects the parser to use depending on the extension of the files it ++# parses. With this tag you can assign which parser to use for a given ++# extension. Doxygen has a built-in mapping, but you can override or extend it ++# using this tag. The format is ext=language, where ext is a file extension, and ++# language is one of the parsers supported by doxygen: IDL, Java, Javascript, ++# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: ++# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: ++# Fortran. In the later case the parser tries to guess whether the code is fixed ++# or free formatted code, this is the default for Fortran type files), VHDL. For ++# instance to make doxygen treat .inc files as Fortran files (default is PHP), ++# and .f files as C (default is Fortran), use: inc=Fortran f=C. ++# ++# Note: For files without extension you can use no_extension as a placeholder. ++# ++# Note that for custom extensions you also need to set FILE_PATTERNS otherwise ++# the files are not read by doxygen. ++ ++EXTENSION_MAPPING = ++ ++# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments ++# according to the Markdown format, which allows for more readable ++# documentation. See http://daringfireball.net/projects/markdown/ for details. ++# The output of markdown processing is further processed by doxygen, so you can ++# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in ++# case of backward compatibilities issues. ++# The default value is: YES. ++ ++MARKDOWN_SUPPORT = NO ++ ++# When enabled doxygen tries to link words that correspond to documented ++# classes, or namespaces to their corresponding documentation. Such a link can ++# be prevented in individual cases by putting a % sign in front of the word or ++# globally by setting AUTOLINK_SUPPORT to NO. ++# The default value is: YES. ++ ++AUTOLINK_SUPPORT = YES ++ ++# 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); ++# versus func(std::string) {}). This also make the inheritance and collaboration ++# diagrams that involve STL classes more complete and accurate. ++# The default value is: NO. ++ ++BUILTIN_STL_SUPPORT = NO ++ ++# If you use Microsoft's C++/CLI language, you should set this option to YES to ++# enable parsing support. ++# The default value is: NO. ++ ++CPP_CLI_SUPPORT = NO ++ ++# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: ++# http://www.riverbankcomputing.co.uk/software/sip/intro) 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. ++# The default value is: NO. ++ ++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 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. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++DISTRIBUTE_GROUP_DOC = NO ++ ++# Set the SUBGROUPING tag to YES 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. ++# The default value is: YES. ++ ++SUBGROUPING = YES ++ ++# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions ++# are shown inside the group in which they are included (e.g. using \ingroup) ++# instead of on a separate page (for HTML and Man pages) or section (for LaTeX ++# and RTF). ++# ++# Note that this feature does not work in combination with ++# SEPARATE_MEMBER_PAGES. ++# The default value is: NO. ++ ++INLINE_GROUPED_CLASSES = NO ++ ++# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions ++# with only public data fields or simple typedef fields will be shown inline in ++# the documentation of the scope in which they are defined (i.e. file, ++# namespace, or group documentation), provided this scope is documented. If set ++# to NO, structs, classes, and unions are shown on a separate page (for HTML and ++# Man pages) or section (for LaTeX and RTF). ++# The default value is: NO. ++ ++INLINE_SIMPLE_STRUCTS = NO ++ ++# When TYPEDEF_HIDES_STRUCT tag 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. ++# The default value is: NO. ++ ++TYPEDEF_HIDES_STRUCT = NO ++ ++# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This ++# cache is used to resolve symbols given their name and scope. Since this can be ++# an expensive process and often the same symbol appears multiple times in the ++# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small ++# doxygen will become slower. If the cache is too large, memory is wasted. The ++# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range ++# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 ++# symbols. At the end of a run doxygen will report the cache usage and suggest ++# the optimal cache size from a speed point of view. ++# Minimum value: 0, maximum value: 9, default value: 0. ++ ++LOOKUP_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 respectively EXTRACT_STATIC tags are set to YES. ++# Note: This will also disable the warnings about undocumented members that are ++# normally produced when WARNINGS is set to YES. ++# The default value is: NO. ++ ++EXTRACT_ALL = YES ++ ++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will ++# be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PRIVATE = YES ++ ++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal ++# scope will be included in the documentation. ++# The default value is: NO. ++ ++EXTRACT_PACKAGE = NO ++ ++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be ++# included in the documentation. ++# The default value is: NO. ++ ++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. Does not have any effect ++# for Java sources. ++# The default value is: YES. ++ ++EXTRACT_LOCAL_CLASSES = YES ++ ++# This flag is only useful for Objective-C code. If 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, only methods in the interface are ++# included. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++EXTRACT_ANON_NSPACES = NO ++ ++# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all ++# undocumented members inside documented classes or files. If set to NO 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. ++# The default value is: NO. ++ ++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, these classes will be included in the various overviews. This option ++# has no effect if EXTRACT_ALL is enabled. ++# The default value is: NO. ++ ++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, these declarations will be ++# included in the documentation. ++# The default value is: NO. ++ ++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, these ++# blocks will be appended to the function's detailed documentation block. ++# The default value is: NO. ++ ++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 then the documentation ++# will be excluded. Set it to YES to include the internal documentation. ++# The default value is: NO. ++ ++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. ++# The default value is: system dependent. ++ ++CASE_SENSE_NAMES = NO ++ ++# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with ++# their full class and namespace scopes in the documentation. If set to YES, the ++# scope will be hidden. ++# The default value is: NO. ++ ++HIDE_SCOPE_NAMES = NO ++ ++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will ++# append additional text to a page's title, such as Class Reference. If set to ++# YES the compound reference will be hidden. ++# The default value is: NO. ++ ++HIDE_COMPOUND_REFERENCE= NO ++ ++# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of ++# the files that are included by a file in the documentation of that file. ++# The default value is: YES. ++ ++SHOW_INCLUDE_FILES = YES ++ ++# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each ++# grouped member an include statement to the documentation, telling the reader ++# which file to include in order to use the member. ++# The default value is: NO. ++ ++SHOW_GROUPED_MEMB_INC = NO ++ ++# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include ++# files with double quotes in the documentation rather than with sharp brackets. ++# The default value is: NO. ++ ++FORCE_LOCAL_INCLUDES = NO ++ ++# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the ++# documentation for inline members. ++# The default value is: YES. ++ ++INLINE_INFO = YES ++ ++# If the SORT_MEMBER_DOCS tag is set to YES 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. ++# The default value is: YES. ++ ++SORT_MEMBER_DOCS = YES ++ ++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief ++# descriptions of file, namespace and class members alphabetically by member ++# name. If set to NO, the members will appear in declaration order. Note that ++# this will also influence the order of the classes in the class list. ++# The default value is: NO. ++ ++SORT_BRIEF_DOCS = NO ++ ++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the ++# (brief and detailed) documentation of class members so that constructors and ++# destructors are listed first. If set to NO the constructors will appear in the ++# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. ++# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief ++# member documentation. ++# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting ++# detailed member documentation. ++# The default value is: NO. ++ ++SORT_MEMBERS_CTORS_1ST = 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 group names will ++# appear in their defined order. ++# The default value is: NO. ++ ++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 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. ++# The default value is: NO. ++ ++SORT_BY_SCOPE_NAME = NO ++ ++# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper ++# type resolution of all parameters of a function it will reject a match between ++# the prototype and the implementation of a member function even if there is ++# only one candidate or it is obvious which candidate to choose by doing a ++# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still ++# accept a match between prototype and implementation in such cases. ++# The default value is: NO. ++ ++STRICT_PROTO_MATCHING = 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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++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. ++# The default value is: YES. ++ ++GENERATE_DEPRECATEDLIST= YES ++ ++# The ENABLED_SECTIONS tag can be used to enable conditional documentation ++# sections, marked by \if <section_label> ... \endif and \cond <section_label> ++# ... \endcond blocks. ++ ++ENABLED_SECTIONS = ++ ++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the ++# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be ++# controlled using \showinitializer or \hideinitializer command in the ++# documentation regardless of this setting. ++# Minimum value: 0, maximum value: 10000, default value: 30. ++ ++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. ++# The default value is: YES. ++ ++SHOW_USED_FILES = 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 value 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 value 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. For an example see the documentation. ++ ++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. To 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. ++# ++# Note that if you run doxygen from a directory containing a file called ++# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE ++# tag is left empty. ++ ++LAYOUT_FILE = ++ ++# The CITE_BIB_FILES tag can be used to specify one or more bib files containing ++# the reference definitions. This must be a list of .bib files. The .bib ++# extension is automatically appended if omitted. This requires the bibtex tool ++# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. ++# For LaTeX the style of the bibliography can be controlled using ++# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the ++# search path. See also \cite for info how to create references. ++ ++CITE_BIB_FILES = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to warning and progress messages ++#--------------------------------------------------------------------------- ++ ++# The QUIET tag can be used to turn on/off the messages that are generated to ++# standard output by doxygen. If QUIET is set to YES this implies that the ++# messages are off. ++# The default value is: NO. ++ ++QUIET = YES ++ ++# The WARNINGS tag can be used to turn on/off the warning messages that are ++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES ++# this implies that the warnings are on. ++# ++# Tip: Turn warnings on while writing the documentation. ++# The default value is: YES. ++ ++WARNINGS = YES ++ ++# If the WARN_IF_UNDOCUMENTED tag 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. ++# The default value is: YES. ++ ++WARN_IF_UNDOCUMENTED = YES ++ ++# If the WARN_IF_DOC_ERROR tag 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. ++# The default value is: YES. ++ ++WARN_IF_DOC_ERROR = YES ++ ++# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that ++# are documented, but have no documentation for their parameters or return ++# value. If set to NO, doxygen will only warn about wrong or incomplete ++# parameter documentation, but not about the absence of documentation. ++# The default value is: NO. ++ ++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) ++# The default value is: $file:$line: $text. ++ ++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 standard ++# error (stderr). ++ ++WARN_LOGFILE = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the input files ++#--------------------------------------------------------------------------- ++ ++# The INPUT tag is 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. ++# Note: If this tag is empty the current directory is searched. ++ ++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. Doxygen uses ++# libiconv (or the iconv built into libc) for the transcoding. See the libiconv ++# documentation (see: http://www.gnu.org/software/libiconv) for the list of ++# possible encodings. ++# The default value is: UTF-8. ++ ++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 patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, ++# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, ++# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, ++# *.qsf, *.as and *.js. ++ ++FILE_PATTERNS = *.h \ ++ *.c \ ++ *.txt ++ ++# The RECURSIVE tag can be used to specify whether or not subdirectories should ++# be searched for input files as well. ++# The default value is: NO. ++ ++RECURSIVE = YES ++ ++# The EXCLUDE tag can be used to specify files and/or directories that should be ++# 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. ++# ++# Note that relative paths are relative to the directory from which doxygen is ++# run. ++ ++EXCLUDE = Documentation/ ++ ++# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or ++# directories that are symbolic links (a Unix file system feature) are excluded ++# from the input. ++# The default value is: NO. ++ ++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 = ++ ++# 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 ++# ++# Note that the wildcards are matched against the file with absolute path, so to ++# exclude all test directories use the pattern */test/* ++ ++EXCLUDE_SYMBOLS = __* \ ++ INCLUDE_FROM_* ++ ++# 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. ++# The default value is: NO. ++ ++EXAMPLE_RECURSIVE = NO ++ ++# The IMAGE_PATH tag can be used to specify one or more files or directories ++# that contain images that are to be 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. ++# ++# Note that the filter must not add or remove lines; it is applied before the ++# code is scanned, but not when the output code is generated. If lines are added ++# or removed, the anchors will not be placed correctly. ++ ++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 information on how ++# filters are used. If the FILTER_PATTERNS tag is empty or if none of the ++# patterns match the file name, INPUT_FILTER is applied. ++ ++FILTER_PATTERNS = ++ ++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using ++# INPUT_FILTER) will also be used to filter the input files that are used for ++# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). ++# The default value is: NO. ++ ++FILTER_SOURCE_FILES = NO ++ ++# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file ++# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and ++# it is also possible to disable source filtering for a specific pattern using ++# *.ext= (so without naming a filter). ++# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. ++ ++FILTER_SOURCE_PATTERNS = ++ ++# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that ++# is part of the input, its contents will be placed on the main page ++# (index.html). This can be useful if you have a project on for instance GitHub ++# and want to reuse the introduction page also for the doxygen output. ++ ++USE_MDFILE_AS_MAINPAGE = ++ ++#--------------------------------------------------------------------------- ++# 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 that ++# also VERBATIM_HEADERS is set to NO. ++# The default value is: NO. ++ ++SOURCE_BROWSER = NO ++ ++# Setting the INLINE_SOURCES tag to YES will include the body of functions, ++# classes and enums directly into the documentation. ++# The default value is: NO. ++ ++INLINE_SOURCES = NO ++ ++# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any ++# special comment blocks from generated source code fragments. Normal C, C++ and ++# Fortran comments will always remain visible. ++# The default value is: YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++REFERENCES_RELATION = NO ++ ++# If the REFERENCES_LINK_SOURCE tag is set to YES 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 documentation. ++# The default value is: YES. ++ ++REFERENCES_LINK_SOURCE = NO ++ ++# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the ++# source code will show a tooltip with additional information such as prototype, ++# brief description and links to the definition and documentation. Since this ++# will make the HTML file larger and loading of large files a bit slower, you ++# can opt to disable this feature. ++# The default value is: YES. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++SOURCE_TOOLTIPS = YES ++ ++# 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. ++# ++# To use it do the following: ++# - Install the latest version of global ++# - Enable SOURCE_BROWSER and USE_HTAGS in the config file ++# - Make sure the INPUT points to the root of the source tree ++# - Run doxygen as normal ++# ++# Doxygen will invoke htags (and that will in turn invoke gtags), so these ++# tools must be available from the command line (i.e. in the search path). ++# ++# The result: instead of the source browser generated by doxygen, the links to ++# source code will now point to the output of htags. ++# The default value is: NO. ++# This tag requires that the tag SOURCE_BROWSER is set to YES. ++ ++USE_HTAGS = NO ++ ++# If the VERBATIM_HEADERS tag is set the YES 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. ++# See also: Section \class. ++# The default value is: YES. ++ ++VERBATIM_HEADERS = NO ++ ++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the ++# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the ++# cost of reduced performance. This can be particularly helpful with template ++# rich C++ code for which doxygen's built-in parser lacks the necessary type ++# information. ++# Note: The availability of this option depends on whether or not doxygen was ++# compiled with the --with-libclang option. ++# The default value is: NO. ++ ++CLANG_ASSISTED_PARSING = NO ++ ++# If clang assisted parsing is enabled you can provide the compiler with command ++# line options that you would normally use when invoking the compiler. Note that ++# the include paths will already be set by doxygen for the files and directories ++# specified with INPUT and INCLUDE_PATH. ++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. ++ ++CLANG_OPTIONS = ++ ++#--------------------------------------------------------------------------- ++# 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. ++# The default value is: YES. ++ ++ALPHABETICAL_INDEX = YES ++ ++# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in ++# which the alphabetical index list will be split. ++# Minimum value: 1, maximum value: 20, default value: 5. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++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 a prefix (or a list of prefixes) that should be ignored ++# while generating the index headers. ++# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. ++ ++IGNORE_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the HTML output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output ++# The default value is: YES. ++ ++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. ++# The default directory is: html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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). ++# The default value is: .html. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_FILE_EXTENSION = .html ++ ++# The HTML_HEADER tag can be used to specify a user-defined HTML header file for ++# each generated HTML page. If the tag is left blank doxygen will generate a ++# standard header. ++# ++# To get valid HTML the header file that includes any scripts and style sheets ++# that doxygen needs, which is dependent on the configuration options used (e.g. ++# the setting GENERATE_TREEVIEW). It is highly recommended to start with a ++# default header using ++# doxygen -w html new_header.html new_footer.html new_stylesheet.css ++# YourConfigFile ++# and then modify the file new_header.html. See also section "Doxygen usage" ++# for information on how to generate the default header that doxygen normally ++# uses. ++# Note: The header is subject to change so you typically have to regenerate the ++# default header when upgrading to a newer version of doxygen. For a description ++# of the possible markers and block names see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_HEADER = ++ ++# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each ++# generated HTML page. If the tag is left blank doxygen will generate a standard ++# footer. See HTML_HEADER for more information on how to generate a default ++# footer and what special commands can be used inside the footer. See also ++# section "Doxygen usage" for information on how to generate the default footer ++# that doxygen normally uses. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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 left blank doxygen will generate a default style sheet. ++# See also section "Doxygen usage" for information on how to generate the style ++# sheet that doxygen normally uses. ++# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as ++# it is more robust and this tag (HTML_STYLESHEET) will in the future become ++# obsolete. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_STYLESHEET = ++ ++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# cascading style sheets that are included after the standard style sheets ++# created by doxygen. Using this option one can overrule certain style aspects. ++# This is preferred over using HTML_STYLESHEET since it does not replace the ++# standard style sheet and is therefore more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). For an example see the documentation. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_STYLESHEET = ++ ++# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the HTML output directory. Note ++# that these files will be copied to the base HTML output directory. Use the ++# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these ++# files. In the HTML_STYLESHEET file, use the file name only. Also note that the ++# files will be copied as-is; there are no commands or markers available. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_EXTRA_FILES = ++ ++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen ++# will adjust the colors in the style sheet and background images according to ++# this color. Hue is specified as an angle on a colorwheel, see ++# http://en.wikipedia.org/wiki/Hue for more information. For instance the value ++# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 ++# purple, and 360 is red again. ++# Minimum value: 0, maximum value: 359, default value: 220. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_HUE = 220 ++ ++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors ++# in the HTML output. For a value of 0 the output will use grayscales only. A ++# value of 255 will produce the most vivid colors. ++# Minimum value: 0, maximum value: 255, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_SAT = 100 ++ ++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the ++# luminance component of the colors in the HTML output. Values below 100 ++# gradually make the output lighter, whereas values above 100 make the output ++# darker. The value divided by 100 is the actual gamma applied, so 80 represents ++# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not ++# change the gamma. ++# Minimum value: 40, maximum value: 240, default value: 80. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_COLORSTYLE_GAMMA = 80 ++ ++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML ++# page will contain the date and time when the page was generated. Setting this ++# to NO can help when comparing the output of multiple runs. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_TIMESTAMP = NO ++ ++# 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_DYNAMIC_SECTIONS = YES ++ ++# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries ++# shown in the various tree structured indices initially; the user can expand ++# and collapse entries dynamically later on. Doxygen will expand the tree to ++# such a level that at most the specified number of entries are visible (unless ++# a fully collapsed tree already exceeds this amount). So setting the number of ++# entries 1 will produce a full collapsed tree by default. 0 is a special value ++# representing an infinite number of entries and will result in a full expanded ++# tree by default. ++# Minimum value: 0, maximum value: 9999, default value: 100. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++HTML_INDEX_NUM_ENTRIES = 100 ++ ++# 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 (see: http://developer.apple.com/tools/xcode/), 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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_DOCSET = NO ++ ++# This tag determines the name of the docset 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. ++# The default value is: Doxygen generated docs. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_FEEDNAME = "Doxygen generated docs" ++ ++# 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. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_BUNDLE_ID = org.doxygen.Project ++ ++# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify ++# the documentation publisher. This should be a reverse domain-name style ++# string, e.g. com.mycompany.MyDocSet.documentation. ++# The default value is: org.doxygen.Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_ID = org.doxygen.Publisher ++ ++# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. ++# The default value is: Publisher. ++# This tag requires that the tag GENERATE_DOCSET is set to YES. ++ ++DOCSET_PUBLISHER_NAME = Publisher ++ ++# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three ++# additional HTML index files: index.hhp, index.hhc, and index.hhk. The ++# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop ++# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on ++# Windows. ++# ++# The HTML Help Workshop contains a compiler that can convert all HTML output ++# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML ++# files are now used as the Windows 98 help format, and will replace the old ++# Windows help format (.hlp) on all Windows platforms in the future. Compressed ++# HTML files also contain an index, a table of contents, and you can search for ++# words in the documentation. The HTML workshop also contains a viewer for ++# compressed HTML files. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_HTMLHELP = NO ++ ++# 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. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_FILE = ++ ++# 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. ++# The file has to be specified with full path. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++HHC_LOCATION = ++ ++# 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). ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++GENERATE_CHI = NO ++ ++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) ++# and project file content. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++CHM_INDEX_ENCODING = ++ ++# 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. Furthermore it ++# enables the Previous and Next buttons. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++BINARY_TOC = NO ++ ++# The TOC_EXPAND flag can be set to YES to add extra items for group members to ++# the table of contents of the HTML help documentation and to the tree view. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTMLHELP is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QCH_FILE = ++ ++# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help ++# Project output. For more information please see Qt Help Project / Namespace ++# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++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 Qt Help Project / Virtual ++# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- ++# folders). ++# The default value is: doc. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_VIRTUAL_FOLDER = doc ++ ++# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom ++# filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_NAME = ++ ++# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the ++# custom filter to add. For more information please see Qt Help Project / Custom ++# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- ++# filters). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_CUST_FILTER_ATTRS = ++ ++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this ++# project's filter section matches. Qt Help Project / Filter Attributes (see: ++# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHP_SECT_FILTER_ATTRS = ++ ++# 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. ++# This tag requires that the tag GENERATE_QHP is set to YES. ++ ++QHG_LOCATION = ++ ++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be ++# generated, together with the HTML files, they form an Eclipse help plugin. To ++# install this plugin and make it available under the help contents menu in ++# Eclipse, the contents of the directory containing the HTML and XML files needs ++# to be copied into the plugins directory of eclipse. The name of the directory ++# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. ++# After copying Eclipse needs to be restarted before the help appears. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_ECLIPSEHELP = NO ++ ++# A unique identifier for the Eclipse help plugin. When installing the plugin ++# the directory name containing the HTML and XML files should also have this ++# name. Each documentation set should have its own identifier. ++# The default value is: org.doxygen.Project. ++# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ++ ++ECLIPSE_DOC_ID = org.doxygen.Project ++ ++# If you want full control over the layout of the generated HTML pages it might ++# be necessary to disable the index and replace it with your own. The ++# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top ++# of each HTML page. A value of NO enables the index and the value YES disables ++# it. Since the tabs in the index contain the same information as the navigation ++# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++DISABLE_INDEX = YES ++ ++# 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 YES, 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 ++# (i.e. any modern browser). Windows users are probably better off using the ++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can ++# further fine-tune the look of the index. As an example, the default style ++# sheet generated by doxygen has an example that shows how to put an image at ++# the root of the tree instead of the PROJECT_NAME. Since the tree basically has ++# the same information as the tab index, you could consider setting ++# DISABLE_INDEX to YES when enabling this option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++GENERATE_TREEVIEW = YES ++ ++# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that ++# doxygen will group on one line in the generated HTML documentation. ++# ++# Note that a value of 0 will completely suppress the enum values from appearing ++# in the overview section. ++# Minimum value: 0, maximum value: 20, default value: 4. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++ENUM_VALUES_PER_LINE = 1 ++ ++# 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. ++# Minimum value: 0, maximum value: 1500, default value: 250. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++TREEVIEW_WIDTH = 250 ++ ++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to ++# external symbols imported via tag files in a separate window. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++EXT_LINKS_IN_WINDOW = NO ++ ++# Use this tag to change the font size of LaTeX formulas included as images in ++# the HTML documentation. 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. ++# Minimum value: 8, maximum value: 50, default value: 10. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_FONTSIZE = 10 ++ ++# Use the FORMULA_TRANPARENT tag to determine whether or not the images ++# generated for formulas are transparent PNGs. Transparent PNGs are not ++# supported properly for IE 6.0, but are supported on all modern browsers. ++# ++# Note that when changing this option you need to delete any form_*.png files in ++# the HTML output directory before the changes have effect. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++FORMULA_TRANSPARENT = YES ++ ++# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see ++# http://www.mathjax.org) which uses client side Javascript for the rendering ++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX ++# installed or if you want to formulas look prettier in the HTML output. When ++# enabled you may also need to install MathJax separately and configure the path ++# to it using the MATHJAX_RELPATH option. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++USE_MATHJAX = NO ++ ++# When MathJax is enabled you can set the default output format to be used for ++# the MathJax output. See the MathJax site (see: ++# http://docs.mathjax.org/en/latest/output.html) for more details. ++# Possible values are: HTML-CSS (which is slower, but has the best ++# compatibility), NativeMML (i.e. MathML) and SVG. ++# The default value is: HTML-CSS. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_FORMAT = HTML-CSS ++ ++# When MathJax is enabled you need to specify the location relative to the HTML ++# output directory using the MATHJAX_RELPATH option. The destination directory ++# should contain the MathJax.js script. For instance, if the mathjax directory ++# is located at the same level as the HTML output directory, then ++# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax ++# Content Delivery Network so you can quickly see the result without installing ++# MathJax. However, it is strongly recommended to install a local copy of ++# MathJax from http://www.mathjax.org before deployment. ++# The default value is: http://cdn.mathjax.org/mathjax/latest. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest ++ ++# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax ++# extension names that should be enabled during MathJax rendering. For example ++# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_EXTENSIONS = ++ ++# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces ++# of code that will be used on startup of the MathJax code. See the MathJax site ++# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an ++# example see the documentation. ++# This tag requires that the tag USE_MATHJAX is set to YES. ++ ++MATHJAX_CODEFILE = ++ ++# When the SEARCHENGINE tag is enabled doxygen will generate a search box for ++# the HTML output. The underlying search engine uses javascript and DHTML and ++# should work on any modern browser. Note that when using HTML help ++# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) ++# there is already a search function so this one should typically be disabled. ++# For large projects the javascript based search engine can be slow, then ++# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to ++# search using the keyboard; to jump to the search box use <access key> + S ++# (what the <access key> is depends on the OS and browser, but it is typically ++# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down ++# key> to jump into the search results window, the results can be navigated ++# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel ++# the search. The filter options can be selected when the cursor is inside the ++# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> ++# to select a filter and <Enter> or <escape> to activate or cancel the filter ++# option. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_HTML is set to YES. ++ ++SEARCHENGINE = NO ++ ++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be ++# implemented using a web server instead of a web client using Javascript. There ++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH ++# setting. When disabled, doxygen will generate a PHP script for searching and ++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing ++# and searching needs to be provided by external tools. See the section ++# "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SERVER_BASED_SEARCH = NO ++ ++# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP ++# script for searching. Instead the search results are written to an XML file ++# which needs to be processed by an external indexer. Doxygen will invoke an ++# external search engine pointed to by the SEARCHENGINE_URL option to obtain the ++# search results. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). ++# ++# See the section "External Indexing and Searching" for details. ++# The default value is: NO. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH = NO ++ ++# The SEARCHENGINE_URL should point to a search engine hosted by a web server ++# which will return the search results when EXTERNAL_SEARCH is enabled. ++# ++# Doxygen ships with an example indexer (doxyindexer) and search engine ++# (doxysearch.cgi) which are based on the open source search engine library ++# Xapian (see: http://xapian.org/). See the section "External Indexing and ++# Searching" for details. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHENGINE_URL = ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed ++# search data is written to a file for indexing by an external tool. With the ++# SEARCHDATA_FILE tag the name of this file can be specified. ++# The default file is: searchdata.xml. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++SEARCHDATA_FILE = searchdata.xml ++ ++# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the ++# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is ++# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple ++# projects and redirect the results back to the right project. ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTERNAL_SEARCH_ID = ++ ++# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen ++# projects other than the one defined by this configuration file, but that are ++# all added to the same external search index. Each project needs to have a ++# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of ++# to a relative location where the documentation can be found. The format is: ++# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... ++# This tag requires that the tag SEARCHENGINE is set to YES. ++ ++EXTRA_SEARCH_MAPPINGS = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the LaTeX output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. ++# The default value is: YES. ++ ++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. ++# The default directory is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_OUTPUT = latex ++ ++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be ++# invoked. ++# ++# Note that when enabling USE_PDFLATEX this option is only used for generating ++# bitmaps for formulas in the HTML output, but not in the Makefile that is ++# written to the output directory. ++# The default file is: latex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_CMD_NAME = latex ++ ++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate ++# index for LaTeX. ++# The default file is: makeindex. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x ++# 14 inches) and executive (7.25 x 10.5 inches). ++# The default value is: a4. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PAPER_TYPE = a4wide ++ ++# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names ++# that should be included in the LaTeX output. To get the times font for ++# instance you can specify ++# EXTRA_PACKAGES=times ++# If left blank no extra packages will be included. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. See ++# section "Doxygen usage" for information on how to let doxygen write the ++# default header to a separate file. ++# ++# Note: Only use a user-defined header if you know what you are doing! The ++# following commands have a special meaning inside the header: $title, ++# $datetime, $date, $doxygenversion, $projectname, $projectnumber, ++# $projectbrief, $projectlogo. Doxygen will replace $title with the empty ++# string, for the replacement values of the other commands the user is referred ++# to HTML_HEADER. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HEADER = ++ ++# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the ++# generated LaTeX document. The footer should contain everything after the last ++# chapter. If it is left blank doxygen will generate a standard footer. See ++# LATEX_HEADER for more information on how to generate a default footer and what ++# special commands can be used inside the footer. ++# ++# Note: Only use a user-defined footer if you know what you are doing! ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_FOOTER = ++ ++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined ++# LaTeX style sheets that are included after the standard style sheets created ++# by doxygen. Using this option one can overrule certain style aspects. Doxygen ++# will copy the style sheet files to the output directory. ++# Note: The order of the extra style sheet files is of importance (e.g. the last ++# style sheet in the list overrules the setting of the previous ones in the ++# list). ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_STYLESHEET = ++ ++# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or ++# other source files which should be copied to the LATEX_OUTPUT output ++# directory. Note that the files will be copied as-is; there are no commands or ++# markers available. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_EXTRA_FILES = ++ ++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is ++# prepared for conversion to PDF (using ps2pdf or pdflatex). 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++PDF_HYPERLINKS = YES ++ ++# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate ++# the PDF file directly from the LaTeX files. Set this option to YES, to get a ++# higher quality PDF documentation. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BATCHMODE = NO ++ ++# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the ++# index chapters (such as File Index, Compound Index, etc.) in the output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_HIDE_INDICES = NO ++ ++# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source ++# code with syntax highlighting in the LaTeX output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_SOURCE_CODE = NO ++ ++# The LATEX_BIB_STYLE tag can be used to specify the style to use for the ++# bibliography, e.g. plainnat, or ieeetr. See ++# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. ++# The default value is: plain. ++# This tag requires that the tag GENERATE_LATEX is set to YES. ++ ++LATEX_BIB_STYLE = plain ++ ++#--------------------------------------------------------------------------- ++# 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 too pretty with other RTF ++# readers/editors. ++# The default value is: NO. ++ ++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. ++# The default directory is: rtf. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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 some other Word compatible readers that support those ++# fields. ++# ++# Note: WordPad (write) and others do not support links. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++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. ++# ++# See also section "Doxygen usage" for information on how to generate the ++# default style sheet that doxygen normally uses. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_STYLESHEET_FILE = ++ ++# Set optional variables used in the generation of an RTF document. Syntax is ++# similar to doxygen's config file. A template extensions file can be generated ++# using doxygen -e rtf extensionFile. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_EXTENSIONS_FILE = ++ ++# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code ++# with syntax highlighting in the RTF output. ++# ++# Note that which sources are shown also depends on other settings such as ++# SOURCE_BROWSER. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_RTF is set to YES. ++ ++RTF_SOURCE_CODE = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the man page output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for ++# classes and files. ++# The default value is: NO. ++ ++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. A directory man3 will be created inside the directory specified by ++# MAN_OUTPUT. ++# The default directory is: man. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_OUTPUT = man ++ ++# The MAN_EXTENSION tag determines the extension that is added to the generated ++# man pages. In case the manual section does not start with a number, the number ++# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is ++# optional. ++# The default value is: .3. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_EXTENSION = .3 ++ ++# The MAN_SUBDIR tag determines the name of the directory created within ++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by ++# MAN_EXTENSION with the initial . removed. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++MAN_SUBDIR = ++ ++# 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 value is: NO. ++# This tag requires that the tag GENERATE_MAN is set to YES. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default directory is: xml. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_OUTPUT = xml ++ ++# 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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_XML is set to YES. ++ ++XML_PROGRAMLISTING = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the DOCBOOK output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files ++# that can be used to generate PDF. ++# The default value is: NO. ++ ++GENERATE_DOCBOOK = NO ++ ++# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. ++# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in ++# front of it. ++# The default directory is: docbook. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_OUTPUT = docbook ++ ++# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the ++# program listings (including syntax highlighting and cross-referencing ++# information) to the DOCBOOK output. Note that enabling this will significantly ++# increase the size of the DOCBOOK output. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_DOCBOOK is set to YES. ++ ++DOCBOOK_PROGRAMLISTING = NO ++ ++#--------------------------------------------------------------------------- ++# Configuration options for the AutoGen Definitions output ++#--------------------------------------------------------------------------- ++ ++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an ++# AutoGen Definitions (see http://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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# The default value is: YES. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++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. ++# This tag requires that the tag GENERATE_PERLMOD is set to YES. ++ ++PERLMOD_MAKEVAR_PREFIX = ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the preprocessor ++#--------------------------------------------------------------------------- ++ ++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all ++# C-preprocessor directives found in the sources and include files. ++# The default value is: YES. ++ ++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, only conditional compilation will be ++# performed. Macro expansion can be done in a controlled way by setting ++# EXPAND_ONLY_PREDEF to YES. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set 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. ++# The default value is: NO. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_ONLY_PREDEF = YES ++ ++# If the SEARCH_INCLUDES tag is set to YES, the include files in the ++# INCLUDE_PATH will be searched if a #include is found. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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. ++# This tag requires that the tag SEARCH_INCLUDES is set to YES. ++ ++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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++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 e.g. ++# 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. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++PREDEFINED = __DOXYGEN__ \ ++ PROGMEM ++ ++# 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 that overrules the ++# definition found in the source code. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++EXPAND_AS_DEFINED = ++ ++# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will ++# remove all references to 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. ++# The default value is: YES. ++# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. ++ ++SKIP_FUNCTION_MACROS = YES ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to external references ++#--------------------------------------------------------------------------- ++ ++# The TAGFILES tag can be used to specify one or more tag files. For each tag ++# file the location of the external documentation should be added. 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. See the ++# section "Linking to external documentation" for more information about the use ++# of tag files. ++# Note: 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. See section "Linking to ++# external documentation" for more information about the usage of tag files. ++ ++GENERATE_TAGFILE = ++ ++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in ++# the class index. If set to NO, only the inherited external classes will be ++# listed. ++# The default value is: NO. ++ ++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. ++# The default value is: YES. ++ ++EXTERNAL_GROUPS = YES ++ ++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in ++# the related pages index. If set to NO, only the current project's pages will ++# be listed. ++# The default value is: YES. ++ ++EXTERNAL_PAGES = YES ++ ++# The PERL_PATH should be the absolute path and name of the perl script ++# interpreter (i.e. the result of 'which perl'). ++# The default file (with absolute path) is: /usr/bin/perl. ++ ++PERL_PATH = /usr/bin/perl ++ ++#--------------------------------------------------------------------------- ++# Configuration options related to the dot tool ++#--------------------------------------------------------------------------- ++ ++# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram ++# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to ++# NO turns the diagrams off. Note that this option also works with HAVE_DOT ++# disabled, but it is recommended to install and use dot, since it yields more ++# powerful graphs. ++# The default value is: YES. ++ ++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 = ++ ++# You can include diagrams made with dia in doxygen documentation. Doxygen will ++# then run dia to produce the diagram and insert it in the documentation. The ++# DIA_PATH tag allows you to specify the directory where the dia binary resides. ++# If left empty dia is assumed to be found in the default search path. ++ ++DIA_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. ++# The default value is: YES. ++ ++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 (see: ++# http://www.graphviz.org/), 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 value is: NO. ++ ++HAVE_DOT = NO ++ ++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed ++# to run in parallel. When set to 0 doxygen will base this on the number of ++# processors available in the system. You can set it explicitly to a value ++# larger than 0 to get control over the balance between CPU load and processing ++# speed. ++# Minimum value: 0, maximum value: 32, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_NUM_THREADS = 0 ++ ++# When you want a differently looking font in the dot files that doxygen ++# generates you can specify the font name using DOT_FONTNAME. You 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. ++# The default value is: Helvetica. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTNAME = ++ ++# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of ++# dot graphs. ++# Minimum value: 4, maximum value: 24, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTSIZE = 10 ++ ++# By default doxygen will tell dot to use the default font as specified with ++# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set ++# the path where dot can find it using this tag. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_FONTPATH = ++ ++# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CLASS_GRAPH = NO ++ ++# If the COLLABORATION_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++COLLABORATION_GRAPH = NO ++ ++# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for ++# groups, showing the direct groups dependencies. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LOOK = NO ++ ++# If the UML_LOOK tag is enabled, the fields and methods are shown inside the ++# class node. If there are many fields or methods and many nodes the graph may ++# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the ++# number of items for each type to make the size more manageable. Set this to 0 ++# for no limit. Note that the threshold may be exceeded by 50% before the limit ++# is enforced. So when you set the threshold to 10, up to 15 fields may appear, ++# but if the number exceeds 15, the total amount of fields shown is limited to ++# 10. ++# Minimum value: 0, maximum value: 100, default value: 10. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++UML_LIMIT_NUM_FIELDS = 10 ++ ++# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and ++# collaboration graphs will show the relations between templates and their ++# instances. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++TEMPLATE_RELATIONS = NO ++ ++# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDE_GRAPH = NO ++ ++# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INCLUDED_BY_GRAPH = NO ++ ++# If the CALL_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALL_GRAPH = NO ++ ++# If the CALLER_GRAPH tag is 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++CALLER_GRAPH = NO ++ ++# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical ++# hierarchy of all classes instead of a textual one. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GRAPHICAL_HIERARCHY = NO ++ ++# If the DIRECTORY_GRAPH tag is 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. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DIRECTORY_GRAPH = NO ++ ++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images ++# generated by dot. ++# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order ++# to make the SVG files visible in IE 9+ (other browsers do not have this ++# requirement). ++# Possible values are: png, jpg, gif and svg. ++# The default value is: png. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_IMAGE_FORMAT = png ++ ++# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to ++# enable generation of interactive SVG images that allow zooming and panning. ++# ++# Note that this requires a modern browser other than Internet Explorer. Tested ++# and working are Firefox, Chrome, Safari, and Opera. ++# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make ++# the SVG files visible. Older versions of IE do not have SVG support. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++INTERACTIVE_SVG = NO ++ ++# The DOT_PATH tag 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. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOTFILE_DIRS = ++ ++# The MSCFILE_DIRS tag can be used to specify one or more directories that ++# contain msc files that are included in the documentation (see the \mscfile ++# command). ++ ++MSCFILE_DIRS = ++ ++# The DIAFILE_DIRS tag can be used to specify one or more directories that ++# contain dia files that are included in the documentation (see the \diafile ++# command). ++ ++DIAFILE_DIRS = ++ ++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the ++# path where java can find the plantuml.jar file. If left blank, it is assumed ++# PlantUML is not used or called during a preprocessing step. Doxygen will ++# generate a warning when it encounters a \startuml command in this case and ++# will not generate output for the diagram. ++ ++PLANTUML_JAR_PATH = ++ ++# When using plantuml, the specified paths are searched for files specified by ++# the !include statement in a plantuml block. ++ ++PLANTUML_INCLUDE_PATH = ++ ++# 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. ++# Minimum value: 0, maximum value: 10000, default value: 50. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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. ++# Minimum value: 0, maximum value: 1000, default value: 0. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++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). ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_TRANSPARENT = YES ++ ++# Set the DOT_MULTI_TARGETS tag to YES to 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. ++# The default value is: NO. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_MULTI_TARGETS = NO ++ ++# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page ++# explaining the meaning of the various boxes and arrows in the dot generated ++# graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++GENERATE_LEGEND = YES ++ ++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot ++# files that are used to generate the various graphs. ++# The default value is: YES. ++# This tag requires that the tag HAVE_DOT is set to YES. ++ ++DOT_CLEANUP = YES diff --cc lib/lufa/Demos/Host/LowLevel/PrinterHost/makefile index 000000000,000000000..bcaa0b473 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/PrinterHost/makefile @@@ -1,0 -1,0 +1,43 @@@ ++# ++# LUFA Library ++# Copyright (C) Dean Camera, 2017. ++# ++# dean [at] fourwalledcubicle [dot] com ++# www.lufa-lib.org ++# ++# -------------------------------------- ++# LUFA Project Makefile. ++# -------------------------------------- ++ ++# Run "make help" for target help. ++ ++MCU = at90usb1287 ++ARCH = AVR8 ++BOARD = USBKEY ++F_CPU = 8000000 ++F_USB = $(F_CPU) ++OPTIMIZATION = s ++TARGET = PrinterHost ++SRC = $(TARGET).c ConfigDescriptor.c Lib/PrinterCommands.c $(LUFA_SRC_USB) $(LUFA_SRC_SERIAL) ++LUFA_PATH = ../../../../LUFA ++CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ ++LD_FLAGS = ++ ++# Default target ++all: ++ ++# Include LUFA-specific DMBS extension modules ++DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA ++include $(DMBS_LUFA_PATH)/lufa-sources.mk ++include $(DMBS_LUFA_PATH)/lufa-gcc.mk ++ ++# Include common DMBS build system modules ++DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS ++include $(DMBS_PATH)/core.mk ++include $(DMBS_PATH)/cppcheck.mk ++include $(DMBS_PATH)/doxygen.mk ++include $(DMBS_PATH)/dfu.mk ++include $(DMBS_PATH)/gcc.mk ++include $(DMBS_PATH)/hid.mk ++include $(DMBS_PATH)/avrdude.mk ++include $(DMBS_PATH)/atprogram.mk diff --cc lib/lufa/Demos/Host/LowLevel/RNDISEthernetHost/Config/LUFAConfig.h index 000000000,000000000..197122fce new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/RNDISEthernetHost/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * \brief LUFA Library Configuration Header File ++ * ++ * This header file is used to configure LUFA's compile time options, ++ * as an alternative to the compile time constants supplied through ++ * a makefile. ++ * ++ * For information on what each token does, refer to the LUFA ++ * manual section "Summary of Compile Tokens". ++ */ ++ ++#ifndef _LUFA_CONFIG_H_ ++#define _LUFA_CONFIG_H_ ++ ++ #if (ARCH == ARCH_AVR8) ++ ++ /* Non-USB Related Configuration Tokens: */ ++// #define DISABLE_TERMINAL_CODES ++ ++ /* USB Class Driver Related Tokens: */ ++// #define HID_HOST_BOOT_PROTOCOL_ONLY ++// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} ++// #define HID_USAGE_STACK_DEPTH {Insert Value Here} ++// #define HID_MAX_COLLECTIONS {Insert Value Here} ++// #define HID_MAX_REPORTITEMS {Insert Value Here} ++// #define HID_MAX_REPORT_IDS {Insert Value Here} ++// #define NO_CLASS_DRIVER_AUTOFLUSH ++ ++ /* General USB Driver Related Tokens: */ ++// #define ORDERED_EP_CONFIG ++ #define USE_STATIC_OPTIONS (USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) ++// #define USB_DEVICE_ONLY ++ #define USB_HOST_ONLY ++// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} ++// #define NO_LIMITED_CONTROLLER_CONNECT ++// #define NO_SOF_EVENTS ++ ++ /* USB Device Mode Driver Related Tokens: */ ++// #define USE_RAM_DESCRIPTORS ++// #define USE_FLASH_DESCRIPTORS ++// #define USE_EEPROM_DESCRIPTORS ++// #define NO_INTERNAL_SERIAL ++// #define FIXED_CONTROL_ENDPOINT_SIZE {Insert Value Here} ++// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} ++// #define FIXED_NUM_CONFIGURATIONS {Insert Value Here} ++// #define CONTROL_ONLY_DEVICE ++// #define INTERRUPT_CONTROL_ENDPOINT ++// #define NO_DEVICE_REMOTE_WAKEUP ++// #define NO_DEVICE_SELF_POWER ++ ++ /* USB Host Mode Driver Related Tokens: */ ++// #define HOST_STATE_AS_GPIOR {Insert Value Here} ++// #define USB_HOST_TIMEOUT_MS {Insert Value Here} ++// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} ++// #define NO_AUTO_VBUS_MANAGEMENT ++// #define INVERTED_VBUS_ENABLE_LINE ++ ++ #else ++ ++ #error Unsupported architecture for this LUFA configuration file. ++ ++ #endif ++#endif diff --cc lib/lufa/Demos/Host/LowLevel/RNDISEthernetHost/ConfigDescriptor.c index 000000000,000000000..c7a45da09 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/RNDISEthernetHost/ConfigDescriptor.c @@@ -1,0 -1,0 +1,235 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 Configuration Descriptor processing routines, to determine the correct pipe configurations ++ * needed to communication with an attached USB device. Descriptors are special computer-readable structures ++ * which the host requests upon device enumeration, to determine the device's capabilities and functions. ++ */ ++ ++#include "ConfigDescriptor.h" ++ ++/** Reads and processes an attached device's descriptors, to determine compatibility and pipe configurations. This ++ * routine will read in the entire configuration descriptor, and configure the hosts pipes to correctly communicate ++ * with compatible devices. ++ * ++ * This routine searches for a RNDIS interface descriptor containing bulk data IN and OUT endpoints, and an interrupt event endpoint. ++ * ++ * \return An error code from the \ref RNDISHost_GetConfigDescriptorDataCodes_t enum. ++ */ ++uint8_t ProcessConfigurationDescriptor(void) ++{ ++ uint8_t ConfigDescriptorData[512]; ++ void* CurrConfigLocation = ConfigDescriptorData; ++ uint16_t CurrConfigBytesRem; ++ ++ USB_Descriptor_Interface_t* RNDISControlInterface = NULL; ++ USB_Descriptor_Endpoint_t* DataINEndpoint = NULL; ++ USB_Descriptor_Endpoint_t* DataOUTEndpoint = NULL; ++ USB_Descriptor_Endpoint_t* NotificationEndpoint = NULL; ++ ++ /* Retrieve the entire configuration descriptor into the allocated buffer */ ++ switch (USB_Host_GetDeviceConfigDescriptor(1, &CurrConfigBytesRem, ConfigDescriptorData, sizeof(ConfigDescriptorData))) ++ { ++ case HOST_GETCONFIG_Successful: ++ break; ++ case HOST_GETCONFIG_InvalidData: ++ return InvalidConfigDataReturned; ++ case HOST_GETCONFIG_BuffOverflow: ++ return DescriptorTooLarge; ++ default: ++ return ControlError; ++ } ++ ++ while (!(DataINEndpoint) || !(DataOUTEndpoint) || !(NotificationEndpoint)) ++ { ++ /* See if we've found a likely compatible interface, and if there is an endpoint within that interface */ ++ if (!(RNDISControlInterface) || ++ USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, ++ DComp_NextCDCDataInterfaceEndpoint) != DESCRIPTOR_SEARCH_COMP_Found) ++ { ++ /* Check if we have already found the control interface's notification endpoint or not */ ++ if (NotificationEndpoint) ++ { ++ /* Get the next RNDIS data interface from the configuration descriptor */ ++ if (USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, ++ DComp_NextCDCDataInterface) != DESCRIPTOR_SEARCH_COMP_Found) ++ { ++ /* Descriptor not found, error out */ ++ return NoCompatibleInterfaceFound; ++ } ++ ++ /* Clear any found endpoints */ ++ DataINEndpoint = NULL; ++ DataOUTEndpoint = NULL; ++ } ++ else ++ { ++ /* Get the next RNDIS control interface from the configuration descriptor */ ++ if (USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation, ++ DComp_NextCDCControlInterface) != DESCRIPTOR_SEARCH_COMP_Found) ++ { ++ /* Descriptor not found, error out */ ++ return NoCompatibleInterfaceFound; ++ } ++ ++ /* Save the interface in case we need to refer back to it later */ ++ RNDISControlInterface = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Interface_t); ++ ++ /* Clear any found endpoints */ ++ NotificationEndpoint = NULL; ++ } ++ ++ /* Skip the remainder of the loop as we have not found an endpoint yet */ ++ continue; ++ } ++ ++ /* Retrieve the endpoint address from the endpoint descriptor */ ++ USB_Descriptor_Endpoint_t* EndpointData = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Endpoint_t); ++ ++ /* If the endpoint is a IN type endpoint */ ++ if ((EndpointData->EndpointAddress & ENDPOINT_DIR_MASK) == ENDPOINT_DIR_IN) ++ { ++ /* Check if the found endpoint is a interrupt or bulk type descriptor */ ++ if ((EndpointData->Attributes & EP_TYPE_MASK) == EP_TYPE_INTERRUPT) ++ NotificationEndpoint = EndpointData; ++ else ++ DataINEndpoint = EndpointData; ++ } ++ else ++ { ++ DataOUTEndpoint = EndpointData; ++ } ++ } ++ ++ /* Configure the RNDIS data IN pipe */ ++ Pipe_ConfigurePipe(RNDIS_DATA_IN_PIPE, EP_TYPE_BULK, DataINEndpoint->EndpointAddress, DataINEndpoint->EndpointSize, 1); ++ ++ /* Configure the RNDIS data OUT pipe */ ++ Pipe_ConfigurePipe(RNDIS_DATA_OUT_PIPE, EP_TYPE_BULK, DataOUTEndpoint->EndpointAddress, DataOUTEndpoint->EndpointSize, 1); ++ ++ /* Configure the RNDIS notification pipe */ ++ Pipe_ConfigurePipe(RNDIS_NOTIFICATION_PIPE, EP_TYPE_INTERRUPT, NotificationEndpoint->EndpointAddress, NotificationEndpoint->EndpointSize, 1); ++ Pipe_SetInterruptPeriod(NotificationEndpoint->PollingIntervalMS); ++ ++ /* Valid data found, return success */ ++ return SuccessfulConfigRead; ++} ++ ++/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's ++ * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration ++ * descriptor processing if an incompatible descriptor configuration is found. ++ * ++ * This comparator searches for the next Interface descriptor of the correct CDC control Class, Subclass and Protocol values. ++ * ++ * \return A value from the DSEARCH_Return_ErrorCodes_t enum ++ */ ++uint8_t DComp_NextCDCControlInterface(void* CurrentDescriptor) ++{ ++ USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t); ++ ++ if (Header->Type == DTYPE_Interface) ++ { ++ USB_Descriptor_Interface_t* Interface = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Interface_t); ++ ++ /* Check the CDC descriptor class, subclass and protocol, break out if correct control interface found */ ++ if ((Interface->Class == CDC_CSCP_CDCClass) && ++ (Interface->SubClass == CDC_CSCP_ACMSubclass) && ++ (Interface->Protocol == CDC_CSCP_VendorSpecificProtocol)) ++ { ++ return DESCRIPTOR_SEARCH_Found; ++ } ++ } ++ ++ return DESCRIPTOR_SEARCH_NotFound; ++} ++ ++/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's ++ * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration ++ * descriptor processing if an incompatible descriptor configuration is found. ++ * ++ * This comparator searches for the next Interface descriptor of the correct CDC data Class, Subclass and Protocol values. ++ * ++ * \return A value from the DSEARCH_Return_ErrorCodes_t enum ++ */ ++uint8_t DComp_NextCDCDataInterface(void* CurrentDescriptor) ++{ ++ USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t); ++ ++ if (Header->Type == DTYPE_Interface) ++ { ++ USB_Descriptor_Interface_t* Interface = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Interface_t); ++ ++ /* Check the CDC descriptor class, subclass and protocol, break out if correct data interface found */ ++ if ((Interface->Class == CDC_CSCP_CDCDataClass) && ++ (Interface->SubClass == CDC_CSCP_NoDataSubclass) && ++ (Interface->Protocol == CDC_CSCP_NoDataProtocol)) ++ { ++ return DESCRIPTOR_SEARCH_Found; ++ } ++ } ++ ++ return DESCRIPTOR_SEARCH_NotFound; ++} ++ ++/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's ++ * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration ++ * descriptor processing if an incompatible descriptor configuration is found. ++ * ++ * This comparator searches for the next bulk IN or OUT endpoint, or interrupt IN endpoint within the current interface, ++ * aborting the search if another interface descriptor is found before the required endpoint (so that it may be compared ++ * using a different comparator to determine if it is another CDC class interface). ++ * ++ * \return A value from the DSEARCH_Return_ErrorCodes_t enum ++ */ ++uint8_t DComp_NextCDCDataInterfaceEndpoint(void* CurrentDescriptor) ++{ ++ USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t); ++ ++ if (Header->Type == DTYPE_Endpoint) ++ { ++ USB_Descriptor_Endpoint_t* Endpoint = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Endpoint_t); ++ ++ /* Check the endpoint type, break out if correct BULK or INTERRUPT type endpoint found */ ++ if (((Endpoint->Attributes & EP_TYPE_MASK) == EP_TYPE_BULK) || ++ ((Endpoint->Attributes & EP_TYPE_MASK) == EP_TYPE_INTERRUPT)) ++ { ++ return DESCRIPTOR_SEARCH_Found; ++ } ++ } ++ else if (Header->Type == DTYPE_Interface) ++ { ++ return DESCRIPTOR_SEARCH_Fail; ++ } ++ ++ return DESCRIPTOR_SEARCH_NotFound; ++} ++ diff --cc lib/lufa/Demos/Host/LowLevel/RNDISEthernetHost/ConfigDescriptor.h index 000000000,000000000..0be574b58 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/RNDISEthernetHost/ConfigDescriptor.h @@@ -1,0 -1,0 +1,73 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ConfigDescriptor.c. ++ */ ++ ++#ifndef _CONFIGDESCRIPTOR_H_ ++#define _CONFIGDESCRIPTOR_H_ ++ ++ /* Includes: */ ++ #include <LUFA/Drivers/USB/USB.h> ++ ++ #include "RNDISEthernetHost.h" ++ ++ /* Macros: */ ++ /** Pipe address for the RNDIS data IN pipe. */ ++ #define RNDIS_DATA_IN_PIPE (PIPE_DIR_IN | 1) ++ ++ /** Pipe address for the RNDIS data OUT pipe. */ ++ #define RNDIS_DATA_OUT_PIPE (PIPE_DIR_OUT | 2) ++ ++ /** Pipe address for the RNDIS notification IN pipe. */ ++ #define RNDIS_NOTIFICATION_PIPE (PIPE_DIR_IN | 3) ++ ++ /* Enums: */ ++ /** Enum for the possible return codes of the \ref ProcessConfigurationDescriptor() function. */ ++ enum RNDISHost_GetConfigDescriptorDataCodes_t ++ { ++ SuccessfulConfigRead = 0, /**< Configuration Descriptor was processed successfully */ ++ ControlError = 1, /**< A control request to the device failed to complete successfully */ ++ DescriptorTooLarge = 2, /**< The device's Configuration Descriptor is too large to process */ ++ InvalidConfigDataReturned = 3, /**< The device returned an invalid Configuration Descriptor */ ++ NoCompatibleInterfaceFound = 4, /**< A compatible interface with the required endpoints was not found */ ++ }; ++ ++ /* Function Prototypes: */ ++ uint8_t ProcessConfigurationDescriptor(void); ++ ++ uint8_t DComp_NextCDCControlInterface(void* CurrentDescriptor); ++ uint8_t DComp_NextCDCDataInterface(void* CurrentDescriptor); ++ uint8_t DComp_NextCDCDataInterfaceEndpoint(void* CurrentDescriptor); ++ ++#endif ++ diff --cc lib/lufa/Demos/Host/LowLevel/RNDISEthernetHost/Lib/RNDISCommands.c index 000000000,000000000..137648c2c new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/RNDISEthernetHost/Lib/RNDISCommands.c @@@ -1,0 -1,0 +1,311 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 ++ * ++ * RNDIS Device commands, to issue RNDIS commands to the device for ++ * the control and data transfer between the host and RNDIS device. ++ */ ++ ++#include "RNDISCommands.h" ++ ++/** Current RNDIS Request ID, for associating sent commands with received data */ ++uint32_t RequestID = 0; ++ ++ ++/** Function to send the given encapsulated RNDIS command to the device. ++ * ++ * \param[in] Buffer Source command data buffer to send to the device ++ * \param[in] Length Number of bytes to send ++ * ++ * \return A value from the USB_Host_SendControlErrorCodes_t enum ++ */ ++uint8_t RNDIS_SendEncapsulatedCommand(void* const Buffer, ++ const uint16_t Length) ++{ ++ USB_ControlRequest = (USB_Request_Header_t) ++ { ++ .bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE), ++ .bRequest = RNDIS_REQ_SendEncapsulatedCommand, ++ .wValue = 0, ++ .wIndex = 0, ++ .wLength = Length, ++ }; ++ ++ /* Select the control pipe for the request transfer */ ++ Pipe_SelectPipe(PIPE_CONTROLPIPE); ++ ++ return USB_Host_SendControlRequest(Buffer); ++} ++ ++/** Function to receive the given encapsulated RNDIS response from the device. ++ * ++ * \param[out] Buffer Destination command data buffer to write read data from the device to ++ * \param[in] Length Number of bytes to read ++ * ++ * \return A value from the USB_Host_SendControlErrorCodes_t enum ++ */ ++uint8_t RNDIS_GetEncapsulatedResponse(void* const Buffer, ++ const uint16_t Length) ++{ ++ USB_ControlRequest = (USB_Request_Header_t) ++ { ++ .bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE), ++ .bRequest = RNDIS_REQ_GetEncapsulatedResponse, ++ .wValue = 0, ++ .wIndex = 0, ++ .wLength = Length, ++ }; ++ ++ /* Select the control pipe for the request transfer */ ++ Pipe_SelectPipe(PIPE_CONTROLPIPE); ++ ++ return USB_Host_SendControlRequest(Buffer); ++} ++ ++/** Sends a RNDIS KEEPALIVE command to the device, to ensure that it does not enter standby mode after periods ++ * of long inactivity. ++ * ++ * \return A value from the USB_Host_SendControlErrorCodes_t enum or RNDIS_COMMAND_FAILED if the device returned a ++ * logical command failure ++ */ ++uint8_t RNDIS_SendKeepAlive(void) ++{ ++ uint8_t ErrorCode; ++ ++ RNDIS_KeepAlive_Message_t KeepAliveMessage; ++ RNDIS_KeepAlive_Complete_t KeepAliveMessageResponse; ++ ++ KeepAliveMessage.MessageType = REMOTE_NDIS_KEEPALIVE_MSG; ++ KeepAliveMessage.MessageLength = sizeof(RNDIS_KeepAlive_Message_t); ++ KeepAliveMessage.RequestId = RequestID++; ++ ++ if ((ErrorCode = RNDIS_SendEncapsulatedCommand(&KeepAliveMessage, ++ sizeof(RNDIS_KeepAlive_Message_t))) != HOST_SENDCONTROL_Successful) ++ { ++ return ErrorCode; ++ } ++ ++ if ((ErrorCode = RNDIS_GetEncapsulatedResponse(&KeepAliveMessageResponse, ++ sizeof(RNDIS_KeepAlive_Complete_t))) != HOST_SENDCONTROL_Successful) ++ { ++ return ErrorCode; ++ } ++ ++ return HOST_SENDCONTROL_Successful; ++} ++ ++/** Initializes the attached RNDIS device's RNDIS interface. ++ * ++ * \param[in] HostMaxPacketSize Size of the packet buffer on the host ++ * \param[out] DeviceMaxPacketSize Pointer to where the packet buffer size of the device is to be stored ++ * ++ * \return A value from the USB_Host_SendControlErrorCodes_t enum or RNDIS_COMMAND_FAILED if the device returned a ++ * logical command failure ++ */ ++uint8_t RNDIS_InitializeDevice(const uint16_t HostMaxPacketSize, ++ uint16_t* const DeviceMaxPacketSize) ++{ ++ uint8_t ErrorCode; ++ ++ RNDIS_Initialize_Message_t InitMessage; ++ RNDIS_Initialize_Complete_t InitMessageResponse; ++ ++ InitMessage.MessageType = REMOTE_NDIS_INITIALIZE_MSG; ++ InitMessage.MessageLength = sizeof(RNDIS_Initialize_Message_t); ++ InitMessage.RequestId = RequestID++; ++ ++ InitMessage.MajorVersion = REMOTE_NDIS_VERSION_MAJOR; ++ InitMessage.MinorVersion = REMOTE_NDIS_VERSION_MINOR; ++ InitMessage.MaxTransferSize = HostMaxPacketSize; ++ ++ if ((ErrorCode = RNDIS_SendEncapsulatedCommand(&InitMessage, ++ sizeof(RNDIS_Initialize_Message_t))) != HOST_SENDCONTROL_Successful) ++ { ++ return ErrorCode; ++ } ++ ++ if ((ErrorCode = RNDIS_GetEncapsulatedResponse(&InitMessageResponse, ++ sizeof(RNDIS_Initialize_Complete_t))) != HOST_SENDCONTROL_Successful) ++ { ++ return ErrorCode; ++ } ++ ++ if (InitMessageResponse.Status != REMOTE_NDIS_STATUS_SUCCESS) ++ return RNDIS_COMMAND_FAILED; ++ ++ *DeviceMaxPacketSize = InitMessageResponse.MaxTransferSize; ++ ++ return HOST_SENDCONTROL_Successful; ++} ++ ++/** Sets a given RNDIS property of an attached RNDIS device. ++ * ++ * \param[in] Oid OID number of the parameter to set ++ * \param[in] Buffer Pointer to where the property data is to be sourced from ++ * \param[in] Length Length in bytes of the property data to sent to the device ++ * ++ * \return A value from the USB_Host_SendControlErrorCodes_t enum or RNDIS_COMMAND_FAILED if the device returned a ++ * logical command failure ++ */ ++uint8_t RNDIS_SetRNDISProperty(const uint32_t Oid, ++ void* Buffer, ++ const uint16_t Length) ++{ ++ uint8_t ErrorCode; ++ ++ struct ++ { ++ RNDIS_Set_Message_t SetMessage; ++ uint8_t ContiguousBuffer[Length]; ++ } SetMessageData; ++ ++ RNDIS_Set_Complete_t SetMessageResponse; ++ ++ SetMessageData.SetMessage.MessageType = REMOTE_NDIS_SET_MSG; ++ SetMessageData.SetMessage.MessageLength = sizeof(RNDIS_Set_Message_t) + Length; ++ SetMessageData.SetMessage.RequestId = RequestID++; ++ ++ SetMessageData.SetMessage.Oid = Oid; ++ SetMessageData.SetMessage.InformationBufferLength = Length; ++ SetMessageData.SetMessage.InformationBufferOffset = (sizeof(RNDIS_Set_Message_t) - sizeof(RNDIS_Message_Header_t)); ++ SetMessageData.SetMessage.DeviceVcHandle = 0; ++ ++ memcpy(SetMessageData.ContiguousBuffer, Buffer, Length); ++ ++ if ((ErrorCode = RNDIS_SendEncapsulatedCommand(&SetMessageData, ++ SetMessageData.SetMessage.MessageLength)) != HOST_SENDCONTROL_Successful) ++ { ++ return ErrorCode; ++ } ++ ++ if ((ErrorCode = RNDIS_GetEncapsulatedResponse(&SetMessageResponse, ++ sizeof(RNDIS_Set_Complete_t))) != HOST_SENDCONTROL_Successful) ++ { ++ return ErrorCode; ++ } ++ ++ if (SetMessageResponse.Status != REMOTE_NDIS_STATUS_SUCCESS) ++ return RNDIS_COMMAND_FAILED; ++ ++ return HOST_SENDCONTROL_Successful; ++} ++ ++/** Gets a given RNDIS property of an attached RNDIS device. ++ * ++ * \param[in] Oid OID number of the parameter to get ++ * \param[in] Buffer Pointer to where the property data is to be written to ++ * \param[in] MaxLength Length in bytes of the destination buffer size ++ * ++ * \return A value from the USB_Host_SendControlErrorCodes_t enum or RNDIS_COMMAND_FAILED if the device returned a ++ * logical command failure ++ */ ++uint8_t RNDIS_QueryRNDISProperty(const uint32_t Oid, ++ void* Buffer, ++ const uint16_t MaxLength) ++{ ++ uint8_t ErrorCode; ++ ++ RNDIS_Query_Message_t QueryMessage; ++ ++ struct ++ { ++ RNDIS_Query_Complete_t QueryMessageResponse; ++ uint8_t ContiguousBuffer[MaxLength]; ++ } QueryMessageResponseData; ++ ++ QueryMessage.MessageType = REMOTE_NDIS_QUERY_MSG; ++ QueryMessage.MessageLength = sizeof(RNDIS_Query_Message_t); ++ QueryMessage.RequestId = RequestID++; ++ ++ QueryMessage.Oid = Oid; ++ QueryMessage.InformationBufferLength = 0; ++ QueryMessage.InformationBufferOffset = 0; ++ QueryMessage.DeviceVcHandle = 0; ++ ++ if ((ErrorCode = RNDIS_SendEncapsulatedCommand(&QueryMessage, ++ sizeof(RNDIS_Query_Message_t))) != HOST_SENDCONTROL_Successful) ++ { ++ return ErrorCode; ++ } ++ ++ if ((ErrorCode = RNDIS_GetEncapsulatedResponse(&QueryMessageResponseData, ++ sizeof(QueryMessageResponseData))) != HOST_SENDCONTROL_Successful) ++ { ++ return ErrorCode; ++ } ++ ++ if (QueryMessageResponseData.QueryMessageResponse.Status != REMOTE_NDIS_STATUS_SUCCESS) ++ return RNDIS_COMMAND_FAILED; ++ ++ memcpy(Buffer, &QueryMessageResponseData.ContiguousBuffer, MaxLength); ++ ++ return HOST_SENDCONTROL_Successful; ++} ++ ++/** Retrieves the size of a received packet, discarding the remainder of the RNDIS packet header to leave only the ++ * packet contents for processing by the host. ++ * ++ * \param[out] PacketLength Size of the packet currently in the pipe ++ * ++ * \return A value from the Pipe_Stream_RW_ErrorCodes_t enum ++ */ ++uint8_t RNDIS_GetPacketLength(uint16_t* const PacketLength) ++{ ++ uint8_t ErrorCode; ++ ++ Pipe_SelectPipe(RNDIS_DATA_IN_PIPE); ++ Pipe_SetPipeToken(PIPE_TOKEN_IN); ++ Pipe_Unfreeze(); ++ ++ if (!(Pipe_IsReadWriteAllowed())) ++ { ++ *PacketLength = 0; ++ Pipe_Freeze(); ++ return PIPE_RWSTREAM_NoError; ++ } ++ ++ RNDIS_Packet_Message_t DeviceMessage; ++ ++ if ((ErrorCode = Pipe_Read_Stream_LE(&DeviceMessage, sizeof(RNDIS_Packet_Message_t), NULL)) != PIPE_RWSTREAM_NoError) ++ { ++ return ErrorCode; ++ } ++ ++ *PacketLength = (uint16_t)DeviceMessage.DataLength; ++ ++ Pipe_Discard_Stream(DeviceMessage.DataOffset - (sizeof(RNDIS_Packet_Message_t) - sizeof(RNDIS_Message_Header_t)), ++ NULL); ++ ++ Pipe_Freeze(); ++ ++ return PIPE_RWSTREAM_NoError; ++} ++ diff --cc lib/lufa/Demos/Host/LowLevel/RNDISEthernetHost/Lib/RNDISCommands.h index 000000000,000000000..44dc4e746 new file mode 100644 --- /dev/null +++ b/lib/lufa/Demos/Host/LowLevel/RNDISEthernetHost/Lib/RNDISCommands.h @@@ -1,0 -1,0 +1,70 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2017. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims 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 RNDISCommands.c. ++ */ ++ ++#ifndef _RNDIS_COMMANDS_H_ ++#define _RNDIS_COMMANDS_H_ ++ ++ /* Includes: */ ++ #include <avr/io.h> ++ #include <stdio.h> ++ #include <string.h> ++ ++ #include <LUFA/Drivers/USB/USB.h>