From: tmk Date: Wed, 13 May 2015 02:13:10 +0000 (+0900) Subject: Merge commit 'f6d56675f9f981c5464f0ca7a1fbb0162154e8c5' X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=f1f2066657f4a0998adc016c95d7e541b436e09f;p=tmk_firmware.git Merge commit 'f6d56675f9f981c5464f0ca7a1fbb0162154e8c5' --- f1f2066657f4a0998adc016c95d7e541b436e09f diff --cc tmk_core/.gitmodules index e21f449,0000000..e69de29 mode 100644,000000..100644 --- a/tmk_core/.gitmodules +++ b/tmk_core/.gitmodules diff --cc tmk_core/protocol/lufa.mk index 2575e89,0000000..87386be mode 100644,000000..100644 --- a/tmk_core/protocol/lufa.mk +++ b/tmk_core/protocol/lufa.mk @@@ -1,50 -1,0 +1,46 @@@ +LUFA_DIR = protocol/lufa + +# Path to the LUFA library - ifeq (, $(wildcard $(TMK_DIR)/$(LUFA_DIR)/LUFA-git/LUFA/Version.h)) - LUFA_PATH ?= $(LUFA_DIR)/LUFA-120730 - else - LUFA_PATH ?= $(LUFA_DIR)/LUFA-git - endif ++LUFA_PATH ?= $(LUFA_DIR)/LUFA-git + + +# Create the LUFA source path variables by including the LUFA makefile +ifneq (, $(wildcard $(TMK_DIR)/$(LUFA_PATH)/LUFA/Build/lufa_sources.mk)) + # New build system from 20120730 + LUFA_ROOT_PATH = $(LUFA_PATH)/LUFA + include $(TMK_DIR)/$(LUFA_PATH)/LUFA/Build/lufa_sources.mk +else + include $(TMK_DIR)/$(LUFA_PATH)/LUFA/makefile +endif + +LUFA_SRC = $(LUFA_DIR)/lufa.c \ + $(LUFA_DIR)/descriptor.c \ + $(LUFA_SRC_USB) + +SRC += $(LUFA_SRC) + +# Search Path +VPATH += $(TMK_DIR)/$(LUFA_DIR) +VPATH += $(TMK_DIR)/$(LUFA_PATH) + +# Option modules +#ifdef $(or MOUSEKEY_ENABLE, PS2_MOUSE_ENABLE) +#endif + +#ifdef EXTRAKEY_ENABLE +#endif + +# LUFA library compile-time options and predefined tokens +LUFA_OPTS = -DUSB_DEVICE_ONLY +LUFA_OPTS += -DUSE_FLASH_DESCRIPTORS +LUFA_OPTS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" +#LUFA_OPTS += -DINTERRUPT_CONTROL_ENDPOINT +LUFA_OPTS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 +LUFA_OPTS += -DFIXED_NUM_CONFIGURATIONS=1 + +OPT_DEFS += -DF_USB=$(F_USB)UL +OPT_DEFS += -DARCH=ARCH_$(ARCH) +OPT_DEFS += $(LUFA_OPTS) + +# This indicates using LUFA stack +OPT_DEFS += -DPROTOCOL_LUFA diff --cc tmk_core/protocol/lufa/LUFA-git/.gitignore index 0000000,0000000..045f969 new file mode 100644 --- /dev/null +++ b/tmk_core/protocol/lufa/LUFA-git/.gitignore @@@ -1,0 -1,0 +1,14 @@@ ++*.o ++*.d ++*.elf ++*.hex ++*.eep ++*.sym ++*.bin ++*.lss ++*.map ++*.bak ++*.class ++Documentation/ ++LUFA/StudioIntegration/ProjectGenerator/* ++LUFA/StudioIntegration/DocBook/* diff --cc tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/BootloaderAPI.c index 0000000,0000000..f7564e9 new file mode 100644 --- /dev/null +++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/BootloaderAPI.c @@@ -1,0 -1,0 +1,75 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2014. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2014 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in 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 tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/BootloaderAPI.h index 0000000,0000000..2462cac new file mode 100644 --- /dev/null +++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/BootloaderAPI.h @@@ -1,0 -1,0 +1,58 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2014. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2014 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in 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 ++ #include ++ #include ++ ++ #include ++ ++ #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 tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/BootloaderAPITable.S index 0000000,0000000..69ebd38 new file mode 100644 --- /dev/null +++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/BootloaderAPITable.S @@@ -1,0 -1,0 +1,91 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2014. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2014 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ 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 tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/BootloaderCDC.c index 0000000,0000000..f66a483 new file mode 100644 --- /dev/null +++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/BootloaderCDC.c @@@ -1,0 -1,0 +1,641 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2014. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2014 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in 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_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(); ++ #endif ++ ++ /* 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)) ++ JumpToApplication |= true; ++ ++ /* If a request has been made to jump to the user application, honor it */ ++ if (JumpToApplication) ++ { ++ /* Turn off the watchdog */ ++ MCUSR &= ~(1< 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_write_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_write_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 tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/BootloaderCDC.h index 0000000,0000000..9b326ab new file mode 100644 --- /dev/null +++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/BootloaderCDC.h @@@ -1,0 -1,0 +1,144 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2014. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2014 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in 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 ++ #include ++ #include ++ #include ++ #include ++ #include ++ #include ++ ++ #include "Descriptors.h" ++ #include "BootloaderAPI.h" ++ #include "Config/AppConfig.h" ++ ++ #include ++ #include ++ #include ++ ++ /* 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 tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/BootloaderCDC.txt index 0000000,0000000..55e5e55 new file mode 100644 --- /dev/null +++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/BootloaderCDC.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 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. ++ * ++ * ++ * ++ * ++ * ++ * ++ * ++ * ++ * ++ * ++ * ++ * ++ * ++ * ++ * ++ * ++ * ++ * ++ * ++ * ++ * ++ * ++ *
USB Mode:Device
USB Class:Communications Device Class (CDC)
USB Subclass:Abstract Control Model (ACM)
Relevant Standards:USBIF CDC Class Standard
Supported USB Speeds:Full Speed Mode
++ * ++ * \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 THIS BOOTLOADER IS NOT SECURE. 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 HWB mechanism of the USB AVRs; ground the HWB pin (see device ++ * datasheet) then momentarily ground /RESET to start the bootloader. This assumes the HWBE fuse is set and the BOOTRST ++ * fuse is cleared. ++ * ++ * 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 here for resolution steps. ++ * If the issue still persists then uninstall modemmanager by executing sudo apt-get remove modemmanager, 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 here for resolution steps. ++ * ++ * \par After loading an application, it is not run automatically on startup. ++ * Some USB AVR boards ship with the BOOTRST fuse set, causing the bootloader ++ * to run automatically when the device is reset. In most cases, the BOOTRST ++ * fuse should be disabled and the HWBE fuse used instead to run the bootloader ++ * when needed. ++ * ++ * \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. ++ * ++ * ++ * ++ * ++ * ++ * ++ * ++ * ++ * ++ * ++ * ++ * ++ * ++ * ++ * ++ * ++ * ++ * ++ * ++ * ++ * ++ * ++ * ++ * ++ * ++ * ++ * ++ *
Define Name:Location:Description:
NO_BLOCK_SUPPORTAppConfig.hDefine to disable memory block read/write support in the bootloader, requiring all reads and writes to be made ++ * using the byte-level commands.
NO_EEPROM_BYTE_SUPPORTAppConfig.hDefine 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.
NO_FLASH_BYTE_SUPPORTAppConfig.hDefine 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.
NO_LOCK_BYTE_WRITE_SUPPORTAppConfig.hDefine to disable lock byte write support in the bootloader, preventing the lock bits from being set programmatically.
++ */ ++ diff --cc tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/Config/AppConfig.h index 0000000,0000000..bbb5cb2 new file mode 100644 --- /dev/null +++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/Config/AppConfig.h @@@ -1,0 -1,0 +1,50 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2014. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2014 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in 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 tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/Config/LUFAConfig.h index 0000000,0000000..af2dd30 new file mode 100644 --- /dev/null +++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/Config/LUFAConfig.h @@@ -1,0 -1,0 +1,93 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2014. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2014 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in 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 tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/Descriptors.c index 0000000,0000000..2ff6b50 new file mode 100644 --- /dev/null +++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/Descriptors.c @@@ -1,0 -1,0 +1,244 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2014. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2014 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in 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 uint8_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 tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/Descriptors.h index 0000000,0000000..ef04379 new file mode 100644 --- /dev/null +++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/Descriptors.h @@@ -1,0 -1,0 +1,158 @@@ ++/* ++ LUFA Library ++ Copyright (C) Dean Camera, 2014. ++ ++ dean [at] fourwalledcubicle [dot] com ++ www.lufa-lib.org ++*/ ++ ++/* ++ Copyright 2014 Dean Camera (dean [at] fourwalledcubicle [dot] com) ++ ++ Permission to use, copy, modify, distribute, and sell this ++ software and its documentation for any purpose is hereby granted ++ without fee, provided that the above copyright notice appear in ++ all copies and that both that the copyright notice and this ++ permission notice and warranty disclaimer appear in supporting ++ documentation, and that the name of the author not be used in ++ advertising or publicity pertaining to distribution of the ++ software without specific, written prior permission. ++ ++ The author disclaims all warranties with regard to this ++ software, including all implied warranties of merchantability ++ and fitness. In no event shall the author be liable for any ++ special, indirect or consequential damages or any damages ++ whatsoever resulting from loss of use, data or profits, whether ++ in 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 ++ ++ #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 0x94 ++ #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 uint8_t wIndex, ++ const void** const DescriptorAddress) ++ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); ++ ++#endif ++ diff --cc tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/LUFA CDC Bootloader.inf index 0000000,0000000..61624c7 new file mode 100644 --- /dev/null +++ b/tmk_core/protocol/lufa/LUFA-git/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 tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/asf.xml index 0000000,0000000..72f3ff0 new file mode 100644 --- /dev/null +++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/asf.xml @@@ -1,0 -1,0 +1,161 @@@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ CDC Class Bootloader, capable of reprogramming a device using avrdude or other AVR109 protocol compliant software when plugged into a host. ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ diff --cc tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/doxyfile index 0000000,0000000..2dfb2a0 new file mode 100644 --- /dev/null +++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/doxyfile @@@ -1,0 -1,0 +1,2365 @@@ ++# Doxyfile 1.8.8 ++ ++# 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 an logo or 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 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. When set to YES local methods, ++# which are defined in the implementation section but not in the interface are ++# included in the documentation. If set to NO 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 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 ... \endif and \cond ++# ... \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: ++# ++# ++# ++# where is the value of the INPUT_FILTER tag, and 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 therefor more robust against future updates. ++# Doxygen will copy the style sheet files to the output directory. ++# Note: The order of the extra stylesheet files is of importance (e.g. the last ++# stylesheet 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 stylesheet 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 stylesheets (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 ++ ++# When 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 prerendered 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 + S ++# (what the is depends on the OS and browser, but it is typically ++# , /